mongodb
- 1个数据库对应对个集合
- 1个集合对应多个文档对象
- mongdb中无论是集合还是对象都不用去创建它
- 直接用,db.要创建的集合名称.save({})集合就被创建了
mongodb和mysql区别
- mysql(关系型数据库) 有数据需要提前建表,加入数据(各表之间关系强烈)
- mongodb(非关系型数据库) 关系操作比较弱化,所有的DB/集合都无需提前创建,就当已经存在,直接用。
node中mongodb运用
- 安装mysql模块: npm install mongodb --save 连接mongodb`
- 连接mongdb
// 客户端
const MongoClient = require("mongodb").MongoClient;
// 连接URL
const url = "mongodb://localhost:27017";
// 数据库名
const dbName = "test";
(async function() {
// 0.创建客户端
const client = new MongoClient(url, { useNewUrlParser: true }); try {
// 1.连接数据库(异步) await client.connect(); console.log("连接成功");
} catch (error) {
console.error(error);
}
client.close();
})();
- 插入文档
// 查询所有数据库 show dbs
// 切换/创建数据库,当创建一个集合(table)的时候会自动创建当前数据库 use test
// 得到当前db的所有聚集集合 db.getCollectionNames()
// 查询 db.fruits.find()
// 插入一条数据 db.fruits.save({name:‘苹果’,price:5})
// 条件查询 db.fruits.find({price:5}) db.fruits.find({price: {$lte: 10}})
开课吧web全栈架构师 - 查询操作符:提供多种方式定位数据库数据
比较$eq,$gt,$gte,$in
逻辑$and,$not,$nor,$or
模拟$regex,$text,$expr
元素$exists,$type
数组$all,$elemMatch,$size 地理空间$geoIntersects,$geoWithin,$near,$nearSphere
更新操作符:可以修改数据库数据或添加附加数据
字段相关:$set,$unset,$setOnInsert,$rename,$inc,$min,$max,$mul 数组相关:$,$[],$addToSet,$pull,$pop,$push,$pullAll 修改器,常结合数组操作符使用:$each,$position,$slice,$sort
聚合操作符:使用aggregate方法,使文档顺序通过管道阶段从而得到最终结果
聚合管道阶段:$group,$count,$sort,$skip,$limit,$project等 聚合管道操作符:$add,$avg,$sum等
- 查询数据 find
db.集合名.find()
- 添加数据
db.集合名.save(对象)
mongodb会自动添加_id作为文档对象的唯一标志符
db.集合名.insert(对象)
insert和save的区别是,save是插入并更新(添加_id可以更新)。insert添加相同_id会报错
- 删除数据
db.集合名.remove(对象)
- 修改数据
db.集合名.update({对象},{对象})
- 条件查询
db.集合名.find({age:{gt:18}})
年龄大于18的。
- 分页
db.集合名.find().skip(3).limit(3)
跳到第3项作为起始数据,限制查找3项
- 排序
db.集合名.find().sort({key:排序方式])
1 表示升序,-1表示降序
- 模糊匹配
db.集合名.find({name:正则})
查询语句可以写正则
- 聚合函数
求总数:
db.集合名.find().count()
- 联合查询
db.集合名1.aggregate([
{
$lookup:{ //管道中加入一个查询
from:'集合名2', //从哪个集合名产生关联
localField:"对象属性1",//集合名1的字段
foreignField:"对象属性2",//集合名2的字段
当对象属性1 === 对象属性2 就合并数据
as:'集合名2的别名'
}
}
])