今天繼續很久沒學習的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 })
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
