Mongodbのupdate操作のまとめ

15406 ワード

注意:この文章で述べた文法の紹介はmongodb shell環境内であり、java、phpなどの言語プログラミングを実際に運用する場合と使用方法にはいくつかの違いがありますが、文法(クエリー条件、$in、$incなど)は同じです.本文は公式のドキュメントを参考にして紹介したのですが、公式のドキュメントがあるのは、一方では翻訳として、結局使うたびに英語のドキュメントを読むのは疲れています.第二に、公式のドキュメントの説明は簡単で、公式のドキュメントを見る時間があるのは理解しにくいので、私は実際の操作の状況でいくつかの補充をすることができます.はい、もう言わないでください.次は正式に始まります.mongodbの更新には2つのコマンドがあります.1).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.test0.update( { "count": { $gt : 1 } } , { $set : { "test2": "OK"} } ); 最初のレコードdbのみが更新.test0.update( { "count": { $gt : 3 } } , { $set : { "test2": "OK"} },false,true ); dbがすべて更新されました.test0.update( { "count": { $gt : 4 } } , { $set : { "test5": "OK"} },true,false ); 最初のdbしか入っていません.test0.update( { "count": { $gt : 5 } } , { $set : { "test5": "OK"} },true,true ); 全部dbに入れました.test0.update( { "count": { $gt : 15 } } , { $inc : { "count": 1} },false,true );dbがすべて更新されました.test0.update( { "count": { $gt : 10 } } , { $inc : { "count": 1} },false,false );第1条2のみ更新された).save()コマンドdb.collection.save(x)xは更新するオブジェクトであり,単一のレコードのみである.collection内にxオブジェクトと同じ"_id"のレコードが既に存在する場合.mongodbはcollection内にすでに存在するレコードをxオブジェクトに置き換えます.そうしないとxオブジェクトが挿入され、x内に_がない場合id、システムは自動的に再挿入を生成します.上記update文のupsert=true,multi=falseに相当する場合.例:db.test0.save({count:40,test1:"OK"}); #_idシステムはdbを生成する.test0.save({_id:40,count:40,test1:"OK"}); #test 0に_がある場合idは40に等しく、置き換えられます.そうしないと挿入されます.mongodbの更新オペレータ:1)$inc用法:{$inc:{field:value}}数字フィールドfieldにvalueを追加することを意味します.例:>db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 16, "test1": "TESTTEST", "test2": "OK", "test3": "TESTTEST", "test4": "OK", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $inc : { "count": 1 } } ); > db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 17, "test1": "TESTTEST", "test2": "OK", "test3": "TESTTEST", "test4": "OK", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $inc : { "count": 2 } } ); > db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 19, "test1": "TESTTEST", "test2": "OK", "test3": "TESTTEST", "test4": "OK", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $inc : { "count": -1 } } ); > db.test0.find( { "_id": 15 } ); {"_id":{"floatApprox":15},"count":18,"test 1":"TESTTEST","test 2":"OK","test 3":"TESTTEST","test 4":"OK","test 5":"OK"}2)$set用法:{$set:{field:value}}はsqlに相当するset field=valueであり、すべてのデータ型が$setをサポートする.例:>db.test0.update( { "_id": 15 } , { $set : { "test1": "testv1","test2": "testv2","test3": "testv3","test4": "testv4"} } ); > db.test0.find( { "_id": 15 } ); {"_id":{"floatApprox":15},"count":18,"test 1","testv 1","test 2","testv 2","test 3":"testv 3","test 4":"testv 4","test 5":"OK"}3)$unset用法:{$unset:{field:1}名前の通りフィールドを削除します.例:>db.test0.update( { "_id": 15 } , { $unset : { "test1":1 } } ); > db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 18, "test2": "testv2", "test3": "testv3", "test4": "testv4", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $unset : { "test2": 0 } } ); > db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 18, "test3": "testv3", "test4": "testv4", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $unset : { "test3":asdfasf } } ); Fri May 14 16:17:38 JS Error: ReferenceError: asdfasf is not defined (shell):0 > db.test0.update( { "_id": 15 } , { $unset : { "test3":"test"} } ); > db.test0.find( { "_id": 15 } ); {"_id":{"floatApprox":15},"count":18,"test 4":"testv 4","test 5":"OK"}field:1の中の1は何に使うのか、どうせ物があればいい.4) $push
  :{ $push : { field : value } }
 
 value   field   ,field          ,  field   ,            。 :
 
> db.test0.update( { "_id" : 15 } , { $set : { "test1" : ["aaa","bbb"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb" ], "test4" : "testv4", "test5" : "OK" }
 
> db.test0.update( { "_id" : 15 } , { $push : { "test1": "ccc" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" ], "test4" : "testv4", "test5" : "OK" }
 
> db.test0.update( { "_id" : 15 } , { $push : { "test2": "ccc" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
 
> db.test0.update( { "_id" : 15 } , { $push : { "test1": ["ddd","eee"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc", [ "ddd", "eee" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }

5)$pushAll用法:{$pushAll:{field:value_array}}同$pushは、一度に複数の値を1つの配列フィールドに追加できるだけです.例:>db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 18, "test1": [ "aaa", "bbb", "ccc", [ "ddd", "eee"] ], "test2": [ "ccc"], "test4": "testv4", "test5": "OK"} > db.test0.update( { "_id": 15 } , { $pushAll : { "test1": ["fff","ggg"] } } ); > db.test0.find( { "_id": 15 } ); { "_id": { "floatApprox": 15 }, "count": 18, "test1": [ "aaa", "bbb", "ccc", [ "ddd", "eee"], "fff", "ggg"], "test2": [ "ccc"], "test4": "testv4", "test5": "OK"}6)  $addToSet  
  :{ $addToSet : { field : value } }
 
         ,                。 :
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": {$each : ["444","555"] } } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "aaa",
        "bbb",
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444",
        "555"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": {$each : ["444","555"] } } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "aaa",
        "bbb",
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444",
        "555"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": ["444","555"]  } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "aaa",
        "bbb",
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444",
        "555",
        [
                "444",
                "555"
        ]
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": ["444","555"]  } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "aaa",
        "bbb",
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444",
        "555",
        [
                "444",
                "555"
        ]
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
 
 
7) $pop
 
         
 
  :
       :{ $pop : { field : 1  } }

      :{ $pop : { field : -1  } }
 
  ,       ,       1 -1,    2 -2     。mongodb 1.1          , :
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "bbb",
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1": -1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
        "ccc",
        [
                "ddd",
                "eee"
        ],
        "fff",
        "ggg",
        [
                "111",
                "222"
        ],
        "444"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1": 1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4",
"test5" : "OK" }
 
8) $pull
 
  :$pull : { field : value } }
 
   field       value 。 :
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4",
"test5" : "OK" }
 
> db.test0.update( { "_id" : 15 } , { $pull : { "test1": "ggg" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
 : "OK" }
 
9) $pullAll
 
  :{ $pullAll : { field : value_array } }
 
 $pull,             。 :
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
 : "OK" }
 
> db.test0.update( { "_id" : 15 } , { $pullAll : { "test1": [ "ccc" , "fff" ] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ [ "ddd", "eee" ], [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
 
 
10) $    
$       ,                 。  ,    。        :
 
> 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}}, false, true )
 
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC",  "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }
 
      ,$             ,       。     :
 
> t.find();
{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 2, 3, 2 ] }
> t.update({x: 2}, {$inc: {"x.$": 1}}, false, true);
> t.find();
 
      $  $unset     ,     null    ,     {$pull:{x:null}}     null    。 :
> t.insert({x: [1,2,3,4,3,2,3,4]})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, 3, 4, 3, 2, 3, 4 ] }
> t.update({x:3}, {$unset:{"x.$":1}})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, null, 4, 3, 2, 3, 4 ] }
 
{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 3, 3, 2 ] }