mongoDB 更新数据

更新数据

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

接下来让我们详细来看下两个函数的应用及其区别。

  • save() 方法

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

      db.collection.save(
      
       <document>,
       
      {
      
      writeConcern: <document>
      
       }
       
       )

参数说明:

document : 文档数据。

writeConcern :可选,抛出异常的级别。

  • 实例

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


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

  • update()方法

     db.collection.update(

     <query>

     <update>

     {

     upsert: <boolean>,
 
     multi: <boolean>,

     writeConcern: <document>,

     }

     )

参数说明:

query : update的查询条件

update : update的对象和一些更新的操作符(如 , , ,inc…)等

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新

writeConcern :可选,抛出异常的级别。

实例 例如,给定一个books包含以下文档的集合:


    {

    _id: 1,

    item: "TBD",

    stock: 0,

    info: { publisher: "1111", pages: 430 },

    tags: [ "technology", "computer" ],

    ratings: [ { by: "ijk", rating: 4 }, { by: "lmn", rating: 5 } ],

    reorder: false

    }

  • 更新部分字段

     db.books.update(

      { _id: 1 },

     {

      $inc: { stock: 5 },  # 自增或者自减,整数为负值 就是自减

      $set: { # set 是更新部分字段

     item: "ABC123",

     "info.publisher": "2222",

     tags: [ "software" ],

     "ratings.1": { by: "xyz", rating: 3 }

     }

     }

     )

  • 更新结果

      {

      "_id" : 1,

      "item" : "ABC123",

      "stock" : 5,

     "info" : { "publisher" : "2222", "pages" : 430 },

     "tags" : [ "software" ],

     "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "xyz", "rating" : 3 } ],

     "reorder" : false

     }

更多实例

只更新第一条记录:

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 );

  • 更新多个文件需要设置multi为true

     db.books.update(

     { stock: { $lte: 10 } },

     { $set: { reorder: true } },

     { multi: true }

      )

  • upsertmulti 结合使用

给定下面的文档


     {

     _id: 5,

     item: "EFG222",

     stock: 18,

     info: { publisher: "0000", pages: 70 },

     reorder: true

     }

     {

     _id: 6,

     item: "EFG222",

     stock: 15,

     info: { publisher: "1111", pages: 72 },

     reorder: true

     }

  • 更新

     db.books.update(

     { item: "EFG222" },

     { $set: { reorder: false, tags: [ "literature", "translated" ] } },

     { upsert: true, multi: true }

     )

  • 更新结果

     {

     "_id" : 5,

     "item" : "EFG222",

     "stock" : 18,

      "info" : { "publisher" : "0000", "pages" : 70 },

      "reorder" : false,

      "tags" : [ "literature", "translated" ]

      }

      {

      "_id" : 6,

     "item" : "EFG222",

     "stock" : 15,

     "info" : { "publisher" : "1111", "pages" : 72 },

     "reorder" : false,

     "tags" : [ "literature", "translated" ]

       }

  • 如果没有匹配的文档就会插入文档

     {

      "_id" : ObjectId("5423200e6694ce357ad2a1ac"),

     "item" : "EFG222",

     "reorder" : false,

     "tags" : [ "literature", "translated" ]

      }

更新数组
实例1

给定以下文档


      db.students.insert([

      { "_id" : 1, "grades" : [ 95, 92, 90 ] },

      { "_id" : 2, "grades" : [ 98, 100, 102 ] },

      { "_id" : 3, "grades" : [ 95, 110, 100 ] }

      ])

  • 更新语句

     db.students.update(

     { grades: { $gte: 100 } },

     { $set: { "grades.$[element]" : 100 } },

     {

     multi: true,

     arrayFilters: [ { "element": { $gte: 100 } } ]

     }

     )

  • 更新结果

      { "_id" : 1, "grades" : [ 95, 92, 90 ] }

      { "_id" : 2, "grades" : [ 98, 100, 100 ] }

      { "_id" : 3, "grades" : [ 95, 100, 100 ] }
  
实例2

给定以下文档


      {

      "_id" : 1,

      "grades" : [

      { "grade" : 80, "mean" : 75, "std" : 6 },

      { "grade" : 85, "mean" : 90, "std" : 4 },

      { "grade" : 85, "mean" : 85, "std" : 6 }

      ]

      }

      {

      "_id" : 2,

      "grades" : [

      { "grade" : 90, "mean" : 75, "std" : 6 },

      { "grade" : 87, "mean" : 90, "std" : 3 },

      { "grade" : 85, "mean" : 85, "std" : 4 }

      ]

      }

  • 更新语句

      db.students2.update({ },

       { $set: { "grades.$[elem].mean" : 100 } },

       {

       multi: true,

       arrayFilters: [ { "elem.grade": { $gte: 85 } } ]

        }

        )
  • 更新结果
       {

        "_id" : 1,

        "grades" : [

        { "grade" : 80, "mean" : 75, "std" : 6 },

        { "grade" : 85, "mean" : 100, "std" : 4 },

        { "grade" : 85, "mean" : 100, "std" : 6 }

        ]

        }

        {

        "_id" : 2,

        "grades" : [

        { "grade" : 90, "mean" : 100, "std" : 6 },

        { "grade" : 87, "mean" : 100, "std" : 3 },

        { "grade" : 85, "mean" : 100, "std" : 4 }

        ]

        }

更多精彩,敬请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB,有几个常用的更新方法,包括save()、update()和findAndModify() 。其,save()方法用于更新或保存数据,它会根据已有的数据来决定是更新还是新增数据。update()方法用于更新指定条件下的数据,可以通过设置更新操作符来单独更新部分数据。findAndModify()方法用于查找并修改指定条件下的数据,可以同时进行查找和更新操作。 在进行数据更新时,可以使用update()方法,并指定筛选条件来确定要更新数据范围 。在update()方法,可以使用更新操作符来指定需要更新的字段和对应的值。如果不希望覆盖原有数据而只是更新部分数据,可以使用更新操作符来实现。例如,可以使用以下方式来更新名为"ww"的人的年龄为90: db.person.update({name: 'ww'}, {age: 90}, {}) 这个更新操作会将名为"ww"的人的年龄字段更新为90,而其他字段则保持不变 。使用update()方法可以根据指定条件来更新数据,使得数据保持最新和准确。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mongodb更新操作](https://blog.csdn.net/ice_stone_kai/article/details/123216202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MongoDB数据更新方法干货篇](https://download.csdn.net/download/weixin_38501363/13697496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值