阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      MongoDB 更新文档

      MongoDB 更新文档

      MongoDB 使用 update()save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。

      update() 方法

      update() 方法用于更新已存在的文档。语法格式如下:

      db.collection.update(
         ,
         ,
         {
           upsert: ,
           multi: ,
           writeConcern:
         }
      )
      
      

      参数说明:

      • query : update 的查询条件,类似 sql update 查询内 where 后面的。
      • update : update 的对象和一些更新的操作符(如 $,$inc…)等,也可以理解为 sql update 查询内 set 后面的
      • upsert : 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false,不插入。
      • multi : 可选,mongodb 默认是 false, 只更新找到的第一条记录,如果这个参数为 true, 就把按条件查出来多条记录全部更新。
      • writeConcern : 可选,抛出异常的级别。

      实例

      我们在集合 col 中插入如下数据:

      >db.col.insert({
          title: 'MongoDB 教程',
          description: 'MongoDB 是一个 Nosql 数据库',
          by: '阿西河教程',
          url: 'http://www.axihe.com',
          tags: ['mongodb', 'database', 'NoSQL'],
          likes: 100
      })
      
      

      接着我们通过 update() 方法来更新标题 (title):

      >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
      WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息
      > db.col.find().pretty()
      {
              "_id" : ObjectId("56064f89ade2f21f36b03136"),
              "title" : "MongoDB",
              "description" : "MongoDB 是一个 Nosql 数据库",
              "by" : "阿西河教程",
              "url" : "http://www.axihe.com",
              "tags" : [
                      "mongodb",
                      "database",
                      "NoSQL"
              ],
              "likes" : 100
      }
      >
      
      

      可以看到标题 (title) 由原来的 “MongoDB 教程” 更新为了 “MongoDB”。

      以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

      >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
      
      

      save() 方法

      save() 方法通过传入的文档来替换已有文档。语法格式如下:

      db.collection.save(
         ,
         {
           writeConcern:
         }
      )
      
      

      参数说明:

      • document : 文档数据。
      • writeConcern : 可选,抛出异常的级别。

      实例

      以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

      >db.col.save({
          "_id" : ObjectId("56064f89ade2f21f36b03136"),
          "title" : "MongoDB",
          "description" : "MongoDB 是一个 Nosql 数据库",
          "by" : "axihe",
          "url" : "http://www.axihe.com",
          "tags" : [
                  "mongodb",
                  "NoSQL"
          ],
          "likes" : 110
      })
      
      

      替换成功后,我们可以通过 find() 命令来查看替换后的数据

      >db.col.find().pretty()
      {
              "_id" : ObjectId("56064f89ade2f21f36b03136"),
              "title" : "MongoDB",
              "description" : "MongoDB 是一个 Nosql 数据库",
              "by" : "axihe",
              "url" : "http://www.axihe.com",
              "tags" : [
                      "mongodb",
                      "NoSQL"
              ],
              "likes" : 110
      }
      >
      
      

      更多实例

      只更新第一条记录:

      db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
      

      全部更新:

      db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
      

      只添加第一条:

      db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
      

      全部添加进去:

      db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
      

      全部更新:

      db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
      

      只更新第一条记录:

      db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
      
      目录
      目录