MongoDB 数组的定位修改器的使用

假设post集合中存有如下两条文档:

{
        "_id" : ObjectId("4f43bffd0c0b1431f9159164"),
        "author" : "Michael",
        "comments" : [
                {
                        "user" : "AA",
                        "vote" : 2
                },
                {
                        "user" : "BB",
                        "vote" : 4
                }
        ],
        "title" : "my first post"
}


{
        "_id" : ObjectId("4f43bffd0c0b1431f9159164"),
        "author" : "Peter",
        "comments" : [
                {
                        "user" : "XX",
                        "vote" : 1
                },
                {
                        "user" : "YY",
                        "vote" : 3
                }
        ],
        "title" : "my second post"
}

现在我想把comments中user为XX的那一条comment的vote数字加1,让它变成2,正确的写法是:

db.post.update({"comments.user":"XX"},{"$inc":{"comments.$.vote":1}});

其中$是定位操作符,使用它的目的是因为在查询出匹配结果之前,我们并不知道这条comment在comments这个数组中的位置(是位置0,还是位置1),因此用$符号占位。同时占位操作法只更新第一个匹配的元素,如果还有一个叫"XX‘的user,那也只有第一个叫“XX”的user vote 值会改变

这里还有一个需要注意的地方是,上面那句命令很容易被写成如下形式:

db.post.update({"author":"Peter"},{"$inc":{"comments.$.vote":1}});

这样写是不对的,你会的到这样一个错误:can't append to array using string field name [$]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值