浏览器标题切换
浏览器标题切换end

MongoDB - 文档基本操作 - 增删改查

  1. 创建

    1.1:向集合中添加一个文档db.collection_name.insertOne()

    • db.Animals.insertOne({
      	name: "pig", 
      	age: 3, 
      	tags: ["black", "white"], 
      	size: {height:13, weight:20.12} 
      })
      

    1.2:向集合中添加多个文档db.collection_name.insertMany()

    • db.Animals.insertMany([
         {name: "dog", age:1, tags: ["black"], size:{ height:10, weight:15} },
         {name: "bee", age:9, tags: ["yellow"], size:{ height:20.1, weight:25.2} },
         {name: "rabbit", age:5, tags: ["white"], size:{ height:30.3, weight:35} }
      ])
      
  2. 查询

    2.1:查看指定集合内的所有的数据:db.collection_name.find()。(返回一个数组

    • 如果数据过多查看不方便,可以使用 db.collection_name.find().pretty() 命令来调整格式。

    • 我们在上面操作的时候,往 Animals (即 collection )中插入了数据(即 document 文档)。 因为没有给文档指定 _id 属性,所以数据库为文档自动添加了 _id field(域) ,并且值类型是 ObjectId(blablabla) (即文档的唯一标识,类似于MySQL中的 primary key)。

    • MongoDB中的数字, 默认情况下是 double 类型。如果存整型, 必须使用函数 NumberInt(整型数字)

    2.2:查询指定集合集合中第一个文档:db.collection_name.findOne()。(返回一个对象

    2.3:$in:查询满足 $in:[] 里面任意一个元素的数据;如果有多个查询条件,则用逗号分开。(只能查询单值)

    • 命令:db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})

    • Eg:

      // db.Animals.find( { age: { $in: [ 1, 3 ] } } )
      // or: 
      // db.Animals.find( { age: { $in: [ 3,1 ] } } )
      db.Animals.find( { 
      age: { $in: [ 1,3 ] } 
      } )
      

    2.4:$or:查询满足 $or:[] 中任意一个字段的数据。

    • 命令:db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})

    • Eg:

      // db.Animals.find({$or: [{age: 1}, {name: "pig"}]}) 
      
      db.Animals.find({
      $or: [{age: 1}, {name: "pig"}]
      })
      

    2.5:$all:查询同时满足 $all:[] 中所有元素的数据。

    • 命令: db.collection_name.find( { key: { $all:["value1" , "value2",.. ] } } ).pretty()

    • Eg: db.Animals.find( { tags: { $all:["white" , "black" ] } } ).pretty()

    2.6:分页查询:使用 limit 关键字。

    • Eg:db.Animals.find().limit(2) (查询 Animals 集合中的前2条记录) 。

    2.7:find() + skip() + limit() 方法。

    • Eg: db.Animals.find().skip(1).limit(3) (查询第2页的3条记录,结合skip()方法,skip(x)是跳过前x条记录)。
  3. 修改

    • 常用修改器:为 $set (赋值)和 $unset (取消赋值)。

    • 修改指定字段的值,使用 Update() 方法修改field对应数据的其他内容。Eg:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}}) ,修改成功如下图所示。注意:update()方法更新时只会更新一个文档,就是说,如果同时存在多条匹配的数据,默认只修改第一条;如果需要修改所有符合条件的数据,则需要写成:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}},{multi:true})

    • $inc 修改器:对某列值进行加或减操作。

      • Eg:db.Animals.update({ "_id": ObjectId("61841ca6f46f59630e817360") }, { $inc: { "age":-2 }})。(Animals集合中对应该id的数据中,age减去2)

    • 如果修改一条不存在的数据不会报错,会给出未修改的信息 WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })

      • Eg: db.Animals.update({age:100},{age:100,name:"pig"})

  4. 删除

    • 删除集合内所有数据。

      • Eg:db.Animals.remove({}) (删除Animals集合中所有数据)。

      • Eg:db.Animals.remove({age:1}) (集合中所有满足 age:1的数据都会被删除。)

    • 删除单个文档: db.collection.deleteOne()

    • 从数据库中删除一个集合:db.collection_name.drop()

    • 删除数据库:db.dropDatabase()

    • 删除所有匹配的文档。

      • Eg:db.Animals.deleteMany( { gender : { $lt : 50 } } )
    • PS:一般数据库中的数据都不会真正意义上的删除,会添加一个字段来表示这个数据是否被删除。

  5. 排序

    • 查询排序:在查询文档内容的时候, 默认是按照 _id 排序。

    • 升序排序:db.Animals.find().sort({age:1})。( 根据age的值进行升序排序)

    • 降序排序:db.Animals.find().sort({age:-1})。(根据age的值进行降序排序)

  6. 投影

    • 作用:指定查询字段。(有时我们对文档进行查询并不是需要所有字段, 比如只需要用到id的情况,这时候我们可以对文档进行投影)

    • 语法:db.collection_name.find(option_query,{key1:1, key2:0, ...})。(key表示要查询/隐藏的字段。key为1表示显示该字段,key为0表示隐藏该字段)

    • Eg:db.Animals.find({},{"age":1, _id:0})

      • 该语句表示:用投影查询集合中所有文档的 age 字段。

      • _id 为0表示隐藏 _id 字段,因为在执行 find() 方法时 _id 字段是始终显示的。

  7. 异常捕捉处理:try catch

    • 如果某条数据插入失败, 将会终止插入, 但已经插入成功的数据不会回滚掉。所以批量插入由于数据较多容易出现失败。解决办法: 用 try catch 进行异常捕捉处理,测试的时候可以不处理。

    • 语法:

      try {
      	code……
      } 
      catch (e) {
        print (e);
      }
      
posted @ 2021-11-12 22:40  抓水母的派大星  阅读(43)  评论(0编辑  收藏  举报