专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 数据库

MongoDB学习收拾之更新

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
MongoDB学习整理之更新

Mongodb更新有两个命令:一个是update,另一个是save

update命令:
        db.collection.update(criteria,objNew,upsert,multi)
        参数说明:
        1)criteria:查询条件,类似于update语句内where后面的内容
        2)objNew:update的对象和一些更新的操作符(如$、$inc等),也可以理解为关系型数据库update语句内set后面的内容
        3)upsert:如果不存在update的纪录,是否插入objNew这个新的document。true为插入,默认是false,不插入
        4)multi:默认是false,只更新找到的第一条纪录,如果为true,按条件查出来的多条纪录全部更新。

测试:
        1)准备数据:
                { "_id" : ObjectId("4fe0595216c38fae7549540f"), "count" : 2, "test2" : "t12" }
                { "_id" : ObjectId("4fe0595816c38fae75495410"), "count" : 3, "test2" : "t12" }
        2)测试更新count > 1 的纪录的test2的值为OK1,没有加入multi值
                db.t1.update({"count":{$gt:1}},{$set:{"test2":"OK1"}})
                更新后
                { "_id" : ObjectId("4fe0595216c38fae7549540f"), "count" : 2, "test2" : "OK1" }
                { "_id" : ObjectId("4fe0595816c38fae75495410"), "count" : 3, "test2" : "t12" }
                只更新了一条数据,是因为multi默认值都是false
        3)测试更新count > 1 的纪录的test2的值为OK2,加入multi               
                db.t1.update({"count":{$gt:1}},{$set:{"test2":"OK2"}},false,true)
                更新后
                { "_id" : ObjectId("4fe0595216c38fae7549540f"), "count" : 2, "test2" : "OK2" }
                { "_id" : ObjectId("4fe0595816c38fae75495410"), "count" : 3, "test2" : "OK2" }       
        4)测试更新count > 4 的纪录的test2的值为OK, upsert:true              
                db.t1.update({"count":{$gt:5}},{$set:{"test5":"OK"}},true,false)
                更新后
                { "_id" : ObjectId("4fe0595216c38fae7549540f"), "count" : 2, "test2" : "OK2" }
                { "_id" : ObjectId("4fe0595816c38fae75495410"), "count" : 3, "test2" : "OK2" }
                { "test5" : "OK" }

save命令:
        db.collection.save(obj)
        obj:要更新的纪录,只能试单挑纪录,如果collection没有存在与obj一样的id,则添加一条记录,否则更新


数据更新操作符
        1)$inc
                用法:{$inc:{field:value}},对一个数字字段的某个field增加value
                更新前:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping", "age" : 30 }
                操作:db.t3.update({name:"liangzhangping"},{$inc:{age:5}})
                更新后:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping", "age" : 35 }
        2)$set
                用法:{$set:{field:value}},类似于SQL语法中“set field=value”
                更新前:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping", "age" : 30 }
                操作:db.t3.update({name:"liangzhangping"},{$set:{age:28}})
                更新后:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping", "age" : 28 }
        3)$unset
                用法:{$unset:{field:1}},删除字段,类似于SQL语法中删除列
                更新前:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping", "age" : 30 }
                操作:db.t3.update({name:"liangzhangping"},{$unset:{age:1}})
                更新后:{ "_id" : ObjectId("4fe096e88a6e072b231ca5c9"), "name" : "liangzhangping" }
        4)$push
                用法:{$push:{field:value}},把value追加到field里。field一定是数组类型,如果field不存在,会新增一个
                更新前:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "userid" : 3, "name" : [ "liangzhangping", "lzp" ] }
                操作:db.t3.update({"userid":3},{$push:{name:"xiaoping"}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping" ], "userid" : 3 }
        5)$pushAll
                用法:{$push:{field:value_array}},用法同$push一样,只是$pushAll一次可以追加多个值到一个数组字段内
                更新前:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping" ], "userid" : 3 }
                操作:db.t3.update({"userid":3},{$pushAll:{name:["N1","N2"]}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping", "N1", "N2" ], "userid" : 3 }
        6)$addToSet
                用法:{$addToSet:{field:value}},加一个值到数组内,而且只有当这个值不在数组内才增加
                更新前:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping", "N1", "N2" ], "userid" : 3 }
                操作:db.t3.update({"userid":3},{$addToSet:{name:"N1"}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping", "N1", "N2" ], "userid" : 3 }
        7)$pop
                用法:{$pop:{field:[1,-1]}},删除数组内的一个值,-1:删除第一个,1:删除最后一个
                更新前:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "liangzhangping", "lzp", "xiaoping", "N1", "N2" ], "userid" : 3 }
                操作:db.t3.update({"userid":3},{$pop:{name:-1}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "lzp", "xiaoping", "N1", "N2" ], "userid" : 3 }               
                操作:db.t3.update({"userid":3},{$pop:{name:1}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "lzp", "xiaoping", "N1" ], "userid" : 3 }
        8)$pull
                用法:{$pull:{field:value}},从数组filed内删除一个等于value的值
                更新前:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "lzp", "xiaoping", "N1" ], "userid" : 3 }
                操作:db.t3.update({"userid":3},{$pull:{name:"N1"}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "lzp", "xiaoping" ], "userid" : 3 }    
        9)$pullAll
                用法:{$pullAll:{field:value_array}},用法同$pull一样,可以一次删除数组内的多个值
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ "lzp", "xiaoping" ], "userid" : 3 }
                操作:db.t3.update({"userid":3},{$pullAll:{name:["lzp", "xiaoping"]}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ ], "userid" : 3 }     
        10)$rename
                用法:{$rename:{old_field_name:new_field_name}},完成字段的重命名
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "name" : [ ], "userid" : 3 }  
                操作:db.t3.update({"userid":3},{$rename:{name:"alias"}})
                更新后:{ "_id" : ObjectId("4fe098f08a6e072b231ca5ca"), "alias" : [ ], "userid" : 3 }  

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: