Mongodb 中一些复杂用法

update

  • 向数组字段添加多个元素,使用$push + $each 命令

举例

旧数据:{ "_id" : "30e087ee5fff301a96e04ad15999ed16", "recvlist" : [ "30e087ee5fff301a96e04ad15999ed16" ]}

命令: db.user_friend.update({"_id" : "30e087ee5fff301a96e04ad15999ed16"},{$push: {recvlist: {$each: ["xx","yy"]}}})      -> 如果push单个的话,直接使用:{$push: {recvlist: "xx"}} 就可以

结果:{ "_id" : "30e087ee5fff301a96e04ad15999ed16", "recvlist" : [ "30e087ee5fff301a96e04ad15999ed16", "xx", "yy" ]}

 

更新子文档中的数组也是一样的操作,只需要将“recvlist” 替换成子文档。例如有以下子文档:

{ "_id" : "30e087ee5fff301a96e04ad15999ed16", "chilid": {"recvlist" : [ "30e087ee5fff301a96e04ad15999ed16" ]}}

使用以下命令即可

db.user_friend.update({"_id" : "30e087ee5fff301a96e04ad15999ed16"},{$push: {"child.recvlist": {$each: ["xx","yy"]}}})

特别注意:"child.recvlist" 一定要将引号,不然会报错

 

  • 从数组字段删除多个元素,使用$pull + $in 命令

举例

旧数据:{ "_id" : "30e087ee5fff301a96e04ad15999ed16", "recvlist" : [ "30e087ee5fff301a96e04ad15999ed16", "xx", "yy" ]}

命令: db.user_friend.update({"_id" : "30e087ee5fff301a96e04ad15999ed16"},{$pull: {recvlist: {$in: ["xx","yy"]}}})      -> 如果pull单个的话,直接使用:{$pull: {recvlist: "xx"}} 就可以

结果:{ "_id" : "30e087ee5fff301a96e04ad15999ed16", "recvlist" : [ "30e087ee5fff301a96e04ad15999ed16"]}

 

  • 更新子文档中数组中的某一个元素值

举例,假如要将 emails.0.accessory.itemid 为10001的,emails.0.accessory.status改为19

旧数据:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { "0" : { "accessory" : [ { "itemid" : 10001, "count" : 1, "status" : 0} ] } } }

命令: db.user_email.update({"_id" : "30e087ee5fff301a96e04ad15999ed333", "emails.0.accessory.itemid":10001}, {$set: {"emails.0.accessory.$.status": 19}}, true)

结果:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { "0" : { "accessory" : [ { "itemid" : 10001, "count" : 1, "status" : 19} ] } } }

注意以上更新命令中在status前面有一个 $ 号

 

  • 根据条件删除子文档中数组的元素

举例,假如要将 emails.0.accessory.itemid 为10001 的记录删除

旧数据:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { "0" : { "accessory" : [ { "itemid" : 10001, "count" : 1, "status" : 0} ] } } }

命令:db.user_email.update({"_id" : "30e087ee5fff301a96e04ad15999ed33"}, {$pull: {"emails.0.accessory": {"itemid": 10001}}})

结果:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { "0" : { "accessory" : [] } } }

 

  • 根据条件删除子文档数据(unset)

举例,假如要将 emails.0 的记录删除

旧数据:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { "0" : { "accessory" : [ { "itemid" : 10001, "count" : 1, "status" : 0} ] } } }

命令:db.user_email.update({"_id" : "30e087ee5fff301a96e04ad15999ed33"}, {$unset: {"emails.0":""}})

结果:{ "_id" : "30e087ee5fff301a96e04ad15999ed333", "emails" : { } }

 

posted @ 2018-09-07 20:25  KisonDu  阅读(406)  评论(0编辑  收藏  举报