收藏 分享(赏)

mongodb update用法.docx

上传人:kpmy5893 文档编号:7653973 上传时间:2019-05-23 格式:DOCX 页数:8 大小:17.70KB
下载 相关 举报
mongodb update用法.docx_第1页
第1页 / 共8页
mongodb update用法.docx_第2页
第2页 / 共8页
mongodb update用法.docx_第3页
第3页 / 共8页
mongodb update用法.docx_第4页
第4页 / 共8页
mongodb update用法.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、mongodb update 用法2011-10-09 17:47ongodb 更新有两个命令:1).update()命令db.collection.update( criteria, objNew, upsert, multi )criteria : update 的查询条件,类似 sql update 查询内 where 后面的objNew : update 的对象和一些更新的操作符(如 $,$inc.)等,也可以理解为 sql update 查询内 set 后面的upsert : 这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 fal

2、se,不插入。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 );

3、只加进去了第一条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 );只更新了第一条2).save()命令db.collection.save( x )x 就是要更新的对象,只能是单条记录。如 果在 co

4、llection 内已经存在一个和 x 对象相同的“_id“ 的记录。mongodb 就会把 x 对象替换 collection 内已经存在的记录,否则将 会插入 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“); #如果 test0 内有_id 等于 40 的,会替换,否则插入。mongodb 的更新操作符:1) $

5、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 );

6、“_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“, “tes

7、t3“ : “TESTTEST“, “test4“ : “OK“, “test5“ : “OK“ db.test0.update( “_id“ : 15 , $inc : “count“ : -1 ); db.test0.find( “_id“ : 15 ); “_id“ : “floatApprox“ : 15 , “count“ : 18, “test1“ : “TESTTEST“, “test2“ : “OK“, “test3“ : “TESTTEST“, “test4“ : “OK“, “test5“ : “OK“ 2) $set用法: $set : field : value 就是相

8、当于 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, “test1“ : “testv1“, “test2“ : “testv2“, “test3“ : “testv3“, “test4“

9、: “testv4“, “test5“ : “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“ : 1

10、5 , $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.u

11、pdate( “_id“ : 15 , $unset : “test3“:“test“ ); db.test0.find( “_id“ : 15 ); “_id“ : “floatApprox“ : 15 , “count“ : 18, “test4“ : “testv4“, “test5“ : “OK“ 没看出 field : 1 里面的 1 是干什么用的,反正只要有东西就行。4) $push用法: $push : field : value 把 value 追加到 field 里面去,field 一定要是数组类型才行,如果 field 不存在,会新增一个数组类型加进去。例: db.test

12、0.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 ,

13、 “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.te

14、st0.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,只是一次可以追加多个值到一个数组字段内

15、。例: 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 , “c

16、ount“ : 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 );

17、 “_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“ :

18、 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“ : “a

19、aa“,“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

20、“,“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“

21、: 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“,“gg

22、g“,“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“,“tes

23、t5“ : “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 : “tes

24、t1“: “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“ : “

25、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

26、“ , “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:co

27、mments.$.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, $in

28、c: “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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报