三、Mongodb实战之——Mongodb Shell实现简单更新

本文介绍了MongoDB Shell中对文档进行更新的各种方法,包括$set用于修改属性,$unset用于删除属性,$push和$addToSet分别用于向数组添加元素,其中$addToSet保证元素的唯一性。通过示例展示了这些操作的用法。
    • update

    所有的更新操作都要求至少两个参数,第一个指明要更新的文档,第二个定义被选中的文档应该如何更新

    第四个参数指定是否执行多项更新,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"}})
    	

  1. $set

    修改某个属性要使用$set

    example

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

  2. $unset

    删除某个属性使用$unset

    example

    
    db.users.update({"pwd":"111111"},{$unset:{userName:1}})
    	

  3. $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" }
    	

  4. $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" }
    	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值