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的别名' 
            
        }
    }
])