介绍
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
安装
MongoDB的基本使用
下载依赖
cnpm i mongodb -S 基本使用
//引入
const MongoClient = require('mongodb').MongoClient;
(async function () {
//获取 client
const client = new MongoClient('mongodb://localhost:27017', {
useNewUrlParser: true /*用新的url解析器解析*/
});
//连接服务端
await client.connect();
console.log('连接成功');
//获取数据库
const db = client.db('luffycity');
//获取集合
const grades = db.collection('grades');
//先删除所有的数据
grades.deleteMany();
//插入一条数据 使用 insertOne()
grades.insertOne({
name: 'holo',
age: 20,
hobby: ['吃饭', '睡觉', '打豆豆'],
score: 86
});
//关闭连接
client.close();
})()
插入多条数据使用insertMany()
//插入多条数据
//返回一个 promise
let res = await grades.insertMany([{
name: 'tom',
age: 18,
hobby: ['抓老鼠', '睡觉', '打豆豆'],
score: 91
}, {
name: 'jerry',
age: 17,
hobby: ['逗猫', '睡觉', '打豆豆'],
score: 88
}])
console.log('插入成功', res);
返回的res
可以通过res.result.ok来判断是否插入成功,res.result.n是插入的条数.
//返回的 res
{
result: { ok: 1, n: 2 },
ops: [
{
name: 'tom',
age: 18,
hobby: [Array],
score: 91,
_id: 5facdcf9cfceac3590ec63a5
},
{
name: 'jerry',
age: 17,
hobby: [Array],
score: 88,
_id: 5facdcf9cfceac3590ec63a6
}
],
insertedCount: 2,
insertedIds: { '0': 5facdcf9cfceac3590ec63a5, '1': 5facdcf9cfceac3590ec63a6 }
}
查询
查询单条数据
let res = await grades.findOne({
name: 'jerry'
});
console.log(res);
查询多条数据
Tips: 返回的结果需要通过toArray()转换才能变成想要的格式.
//查询多条时,需要通过 toArray() 转换成想要的格式
let res = await grades.find().toArray();
console.log(res);
指定查询条件
let res = await grades.find({
name: 'tom'
}).toArray();
比较运算符$gt
let res = await grades.find({
age: {
$gt: 18 //获取 age > 18 的
}
}).toArray();
console.log(res);
逻辑运算符$and
// $and 就相当于写两个条件
// 获取 姓名为'holo'并且年龄为26的
let res = await grades.find({
name: 'holo',
age: 26
}).toArray();
console.log(res);
正则表达式
let res = await grades.find({
name: {
//姓名以H开头的
$regex: /^h/
}
}).toArray();
console.log(res);
$all、$in、$size
$all:查找指定字段中含有指定内容的所有数据
let res = await grades.find({
hobby: {
$all: ['打豆豆']
}
}).toArray();
console.log(res);
$in:查找指定字段中含有指定内容其中之一的所有数据
let res = await grades.find({
hobby: {
$in: ['打豆豆', '抓老鼠']
}
}).toArray();
console.log(res);
$size:查找指定字段中内容长度为 size 的所有数据
let res = await grades.find({
hobby: {
$size: 2
}
}).toArray();
console.log(res);
更多运算符
分页查询
limit()
查询前两条数据
let res = await grades.find().limit(2).toArray();
console.log(res);
skip()
跳过第一条数据,并获取之后的两条数据
let res = await grades.find().skip(1).limit(2).toArray();
console.log(res);
sort()
根据某个字段进行排序
//age为 1 表示正序,age为 -1 表示倒序
let res = await grades.find().sort({
age: 1
}).toArray();
console.log(res);
分页
const pageIndex = 2; //当前索引
const pageSize = 3; //每一页显示的数据个数
let res = await grades.find().skip((pageIndex - 1) * pageSize).limit(pageSize).toArray();
console.log(res);
更新文档
//将姓名为holo并且年龄为26的数据的姓名修改为'booboo'
let res = await grades.updateOne({
name: 'holo',
age: 26
}, {
$set: {
name: 'booboo'
}
})
console.log(res.result);
删除文档
//删除姓名为 jhon 的数据
let res = await grades.deleteOne({
name: 'jhon'
})
console.log(res.result);
聚合函数
Tips:需要使用$group对文档进行分组后才能使用聚合函数
let res = await grades.aggregate([{
$group: {
_id: '$age',
count: {
$sum: 1
}
}
}]).toArray();
console.log(res);
注意: _id: '$age'以age作为分组后的id值,这边只能时写_id,是固定的,保持和MongoDB中默认的id名一致,$sum: 1计算每个年龄的数据之和,当把1改成某个字段时将分别计算该字段相同值的和。