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" : { } }

 

转载于:https://www.cnblogs.com/KisonDu/p/9606869.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值