MongoDB資料修改總結

來源:互聯網
上載者:User

標籤:style   blog   http   os   io   使用   java   ar   for   

MongoDB資料修改總結
2013-10-26 10:08:30      我來說兩句     來源:huhui的專欄   
收藏  我要投稿
MongoDB資料修改總結 1.前言最近在學習MongoDB,資料修改這一部分的內容較多,命令比較繁瑣,所以將一些常用的修改命令總結在這篇部落格中,方便今後學習的查閱。2.命令總結1). insert()db.collection.insert(x)  x就是要更新的對象,只能是單條記錄,如:[plain]db.collection.insert({_id:1,name:"test",count:1}) 當需要批量插入的時候,可以在shell中使用for迴圈,如:[plain]for(var i=0;i<16;i++){       db.mytest.insert({_id:i,name:"test"+i,count:i})  } 此時如果用find()命令查詢插入的資料,結果是這樣的:[plain]> db.mytest.find() { "_id" : 0, "name" : "test0", "count" : 0 }{ "_id" : 1, "name" : "test1", "count" : 1 }{ "_id" : 2, "name" : "test2", "count" : 2 }{ "_id" : 3, "name" : "test3", "count" : 3 }{ "_id" : 4, "name" : "test4", "count" : 4 }{ "_id" : 5, "name" : "test5", "count" : 5 }{ "_id" : 6, "name" : "test6", "count" : 6 }{ "_id" : 7, "name" : "test7", "count" : 7 }{ "_id" : 8, "name" : "test8", "count" : 8 }{ "_id" : 9, "name" : "test9", "count" : 9 }{ "_id" : 10, "name" : "test10", "count" : 10 }{ "_id" : 11, "name" : "test11", "count" : 11 }{ "_id" : 12, "name" : "test12", "count" : 12 }{ "_id" : 13, "name" : "test13", "count" : 13 }{ "_id" : 14, "name" : "test14", "count" : 14 }{ "_id" : 15, "name" : "test15", "count" : 15 } 2). update()db.collection.update( criteria, objNew, upsert, multi )    四個參數的說明如下:criteria: update的查詢條件,類似sql update查詢內where後面的objNew: update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的upsert: 這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。multi: mongodb預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。幾個查詢例子如下:db.mytest.update({count:{$gt:1}},{$set:{name:"ok"}})                                  只更新第一條記錄db.mytest.update({count:{$gt:3}},{$set:{name:"ok"}},false,true)                  大於3的全部更新了db.mytest.update({count:{$gt:4}},{$set:{name:"ok123"}},true,false)            只更新了一條db.mytest.update({count:{$gt:6}},{$set:{name:"ok123"}},true,true)              大於6的全部更新了 3). save()db.collection.save(x) x是要插入的對象,效果與上面的insert命令一樣。save與insert的區別是這樣的:在進行插入資料的操作中,當遇到_id相同的情況下,save完成儲存操作,insert則會儲存;即_id相同情況下,save相當於更新操作。 下面是一些MongoDB的更新操作符 4). $inc用法:{$inc:{field:value}}   意思是對一個數字欄位field增加value:[plain]> db.mytest.find({_id:1})      { "_id" : 1, "name" : "test1", "count" : 1 } > db.mytest.update({_id:1},{$inc:{count:1}}) > db.mytest.find({_id:1}) { "_id" : 1, "name" : "test1", "count" : 2 }  //count欄位加1  value的值也可以為負,就相當於減一個值:[plain]> db.mytest.update({_id:1},{$inc:{count:-2}}) > db.mytest.find({_id:1}) { "_id" : 1, "name" : "test1", "count" : 0 }  //值從2減到0  5). $set命令用法:{$set:{field:value}}相當於在關係型資料庫中sql的set field=value,全部資料類型都支援$set操作[plain]> db.mytest.update({_id:1},{$set:{count:111}}) > db.mytest.find({_id:1}) { "_id" : 1, "name" : "test1", "count" : 111 }   //修改數值型 > db.mytest.update({_id:1},{$set:{name:"MongoDB"}}) > db.mytest.find({_id:1}) { "_id" : 1, "count" : 111, "name" : "MongoDB" }   //修改字元型  6). $unset用法:{$unset:{field:1}}[plain]> db.mytest.find({_id:1}) { "_id" : 1, "count" : 111, "name" : "MongoDB" } > db.mytest.update({_id:1},{$unset:{name:1}}) > db.mytest.find({_id:1}) { "_id" : 1, "count" : 111 }  //刪除了欄位name  7). $push用法:{$push:{field:value}}把value追加到field中取,field一定是資料類型才行,如果field不存在,會新增一個數群組類型加進去:[plain]> db.mytest.update({_id:15},{$set:{array:["aaa","bbb"]}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb" ], "count" : 15, "name" : "ok123" } 使用push追加資料:[plain]> db.mytest.update({_id:15},{$push:{array:"ccc"}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb",  "ccc" ], "count" : 15, "name" : "ok123" } push一次只能追加一個值,如果需要追加多個值,則需要使用$pushAll:[plain]> db.mytest.update({_id:15},{$pushAll:{array:["ddd","eee","fff"]}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb",  "ccc",  "ddd",  "eee",  "fff" ], "count" : 15, "name" : "ok123" }  8). $addToSet用法:{$addToSet:{field:value}}增加一個值到數組內,而且只有當這個值不在數組內才增加:[plain]> db.mytest.update({_id:15},{$addToSet:{array:"123"}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" } > db.mytest.update({_id:15},{$addToSet:{array:"aaa"}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" }  9). $pop刪除數組內的一個值,刪除最後一個值:{$pop:{field:1}} ,刪除第一個值:{$pop:{field:-1}}[plain]> db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb",  "123" ], "array2" : [  "mmm",  "nnn"], "count" : 15, "name" : "ok123" } > db.mytest.update({_id:15},{$pop:{array:1}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15, "name" : "ok123" }  10). $pull用法:$pull:{field:value}   從數組中刪除一個等於value的值:[plain]> db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "aaa",  "bbb" ], "array2" : [  "mmm",  "nnn" ], "coun t" : 15, "name" : "ok123" } > db.mytest.update({_id:15},{$pull:{array:"aaa"}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15, "name" : "ok123" }  11). $pullAll用法同$pull,可以一次刪除數組內的多個值:[plain]> db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "bbb" ], "array2" : [  "mmm",  "nnn" ], "count" : 15,"name" : "ok123" } > db.mytest.update({_id:15},{$pullAll:{array2:["mmm","nnn"]}}) > db.mytest.find({_id:15}) { "_id" : 15, "array" : [  "bbb" ], "array2" : [ ], "count" : 15, "name" : "ok123" }  12). $可以理解為數組定位器,看一個官方文檔的例子:[plain]> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] } > t.update( {‘comments.by‘:‘joe‘}, {$inc:{‘comments.$.votes‘:1}}) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] } 需要注意的是,$只會找到第一條數組項,後面的就不管了:[plain]> db.mytest.find({_id:16}) { "_id" : 16, "x" : [  1,  2,  3,  1 ] } > db.mytest.update({x:1},{$inc:{"x.$":1}}) > db.mytest.find({_id:16}) { "_id" : 16, "x" : [  2,  2,  3,  1 ] }  還有一點需要注意,當$配合$unset使用的時候,會留下一個null的數組項,這個問題可以使用{$pull:{x:null}}解決:[plain]> db.mytest.find({_id:16}) { "_id" : 16, "x" : [  2,  2,  3,  1 ] } > db.mytest.update({x:3},{$unset:{"x.$":1}}) > db.mytest.find({_id:16}) { "_id" : 16, "x" : [  2,  2,  null,  1 ] } > db.mytest.update({_id:16},{$pull:{x:null}}) > db.mytest.find({_id:16}) { "_id" : 16, "x" : [  2,  2,  1 ] }  

MongoDB資料修改總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.