Mongodb中更新的学习小结

系统 1445 0

今天继续很久没学习的mongodb的简单学习,今天来看的是更新。先来看简单的用法:  

use updatetest  
>switched to db updatetest  

首先插入一下:  
db.things.insert( { name : "test1"} )  

db.things.find({name : "test1"})  
会找到:  
  { "_id" : ObjectId("50f1778ea5ec290b7773303b"), "name" : "test1" }  

  更新的格式为:  
  db.collection.update( criteria, objNew, upsert, multi )  
参数:  
criteria - 查询需要更新的项;  
objNew - 更新的对象或者 $ operators (例如 $inc) 这样的操作因子  
upsert - 是否是 "upsert"; 也就是说如果记录不存在是否插入新的记录  
multi - 是否所有满足criteria的在整个文档都更新  
注意:在缺省情况下,update()只会更新第一个满足条件的项。如果需要修改所以的满足条件的  
项的话,需要使用multi这个标志位。  

  db.things.update({name: "test1"}, {name: "test2"})  
再find一下  
  db.things.find({name : "test2"})  
会发现有test2了;  
   再来:  
db.things.update({name : "hello"}, {name: "hello,abc"}, true);  
  注意参数true这里的用法,结果为,因为hello没有,所以只会插入  
hello,abc了。  
  也可以写成:  
  db.things.update({name : "hello"}, {name: "hello,abc"}, { upsert: true });  
注意:  
1、update方法只更新一条记录  
默认情况下update只更新符合查询条件的第一条找到的记录。如果想更新所有符合条件的记录,需要手动添加 multi 这个参数。  

2、update方法的更新参数  
像下面这个语句  
updatetest.update( { _id: X }, {name: "Joe", age: 20 });  
会把符合条件的原纪录按照{name: "Joe", age: 20 }完整替换,而不是简单的将name设为"Joe",age设为20.  
如果只想更改这2个值,而不是替换完整对象,应该写  
updatetest.update( { _id: X },{$set: {name: "Joe", age: 20 }});  
    
   $inc的用法,比如统计经常要用到了,如:  
  db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true });  
    
db.things.find({BlogPost : "How To Do Upserts"})  
>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 1 }  
再多运行两次:  

  db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true });  
db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true });  
>db.things.find({BlogPost : "How To Do Upserts"})  

>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 3 }  

可以看到,hits变为3了。  
     
multi的用法:  
   比如:  
db.Indexing.insert( { name : "Denis", age : 10 } )  
db.Indexing.insert( { name : "Denis", age : 20 } )  
db.Indexing.insert( { name : "Denis", age : 30 } )  

要将所有的denies的age都更新,必须加行multi:  
db.Indexing.update({name: "Denis"}, {$set: {age: 42}},{ multi: true })

Mongodb中更新的学习小结


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论