三、Mongodb実戦の--Mongodb Shellは簡単な更新を実現する


  • update

  • すべての更新操作には少なくとも2つのパラメータが必要です.1つ目は更新するドキュメントを示し、2つ目は選択したドキュメントがどのように更新されるべきかを定義します.
    4番目のパラメータは、複数の更新を実行するかどうかを指定します.MongoDBの更新操作は、クエリー・セレクタが一致する最初のドキュメントにデフォルトで適用されます.
    source code
    
    function (query, obj, upsert, multi) {
        assert(query, "need a query");
        assert(obj, "need an object");
        var firstKey = null;
        for (var k in obj) {
            firstKey = k;
            break;
        }
        if (firstKey != null && firstKey[0] == "$") {
            this._validateObject(obj);
        } else {
            this._validateForStorage(obj);
        }
        if (typeof upsert === "object") {
            assert(multi === undefined, "Fourth argument must be empty when specifying upsert and multi with an object.");
            opts = upsert;
            multi = opts.multi;
            upsert = opts.upsert;
        }
        this._db._initExtraInfo();
        this._mongo.update(this._fullName, query, obj, upsert ? true : false, multi ? true : false);
        this._db._getExtraInfo("Updated");
    }
    	

    example
    
    db.users.update({"pwd":"111111"},{$set:{userName:"bychjzh"}})
    	
  • $set

  • 属性を変更するには$setを使用します
    example
    
      :
     db.users.update({"pwd":"111111"},{$set:{userName:"bychjzh"}})
    	
  • $unset

  • 属性を削除$unsetを使用
    example
    
    db.users.update({"pwd":"111111"},{$unset:{userName:1}})
    	
  • $push

  • $pushは配列に要素を追加できます
    example
    
    > db.users.insert({"userName":"chjzh","pwd":"111","hobbies":["music","listening"]})
    > db.users.find()
    { "_id" : ObjectId("513dad1d5a5c6b621c993e74"), "userName" : "chjzh", "pwd" : "123" }
    { "_id" : ObjectId("51428d3c2540dc509d6d3572"), "pwd" : "111111" }
    { "_id" : ObjectId("5143df5d0d5983f976e05adf"), "userName" : "chjzh", "pwd" : "111", "hobbies" : [ "music", "listening" ] }
    > db.users.update({"pwd":"111"},{$push:{"hobbies":"table tenis"}},false,true)
    > db.users.find()
    { "_id" : ObjectId("513dad1d5a5c6b621c993e74"), "userName" : "chjzh", "pwd" : "123" }
    { "_id" : ObjectId("51428d3c2540dc509d6d3572"), "pwd" : "111111" }
    { "_id" : ObjectId("5143df5d0d5983f976e05adf"), "hobbies" : [ "music", "listening", "table tenis" ], "pwd" : "111", "userName" : "chjzh" }
    	
  • $addToSet

  • $addToSetも配列に要素を追加できます.$pushとは異なり、$addToSetは要素の一意性を保証し、重複追加を防止します.
    example
    
    > db.users.update({"pwd":"111"},{$addToSet:{"hobbies":"table tenis"}},false,true)
    > db.users.update({"pwd":"111"},{$addToSet:{"hobbies":"basketball"}},false,true)
    > db.users.find()
    { "_id" : ObjectId("513dad1d5a5c6b621c993e74"), "userName" : "chjzh", "pwd" : "123" }
    { "_id" : ObjectId("51428d3c2540dc509d6d3572"), "pwd" : "111111" }
    { "_id" : ObjectId("5143df5d0d5983f976e05adf"), "hobbies" : [ "music", "listening", "table tenis", "basketball" ], "pwd" : "111", "userName" : "chjzh" }