5

我需要更新 Mongo DB 中另一个文档中的数组中的文档

    {
            “_id”:ObjectId(“51cff693d342704b5047e6d8”),
            “作者”:“测试”,
            “正文”:“sdfkj dsfhk asdfjad”,
            “评论” : [
                    {
                            “作者”:“测试”,
                            “正文”:“sdfkjdj\r\nasdjgkfdfj”,
                            “电子邮件”:“test@tes.com”
                    },
                    {
                            “作者”:“你好”,
                            "body" : "sdfl\r\nhola \r\n在这里工作"
                    }
            ],
            “日期”:ISODate(“2013-06-30T09:12:51.629Z”),
            “永久链接”:“jaiho”,
            “标签”:[
                    “杰霍”
            ],
            “标题”:“JAiHo”
    }


Q1) 更新评论数组第 0 个元素的电子邮件
db.posts.update({"permalink" : "haha"},{$set:{"comments.0.email":1}})
这不会引发任何异常,但也不会更新任何内容
Q2) 在评论数组 number_likes 的第 n 个元素上添加一个字段
db.posts.update({"permalink" : "haha"},{$inc:{"comments.0.num_likes":1}})
也不行。

我在这里错过了什么吗?
4

2 回答 2

7

Q1:如果您使用永久链接“jaiho”而不是“哈哈”进行更新,它肯定会更新电子邮件;

> db.posts.update({"permalink" : "jaiho"},{$set:{"comments.0.email":1}})
> db.posts.find()
    ...,    "email" : 1 },...

Q2:同样适用于这个包括;

> db.posts.update({"permalink" : "jaiho"},{$inc:{"comments.0.num_likes":1}})
> db.posts.find()
    ..., "num_likes" : 1 },...
于 2013-06-30T10:22:47.993 回答
6

如果您尝试在 Node JS 中动态执行此操作,则应该可以。

i = 0;
selector = {};
operator = {};
selector['comments.' + i + '.email'] = 1; // {'comments.0.num_likes' : 1}
operator['$inc'] = selector;  // {'$inc' : {'comments.0.num_likes' : 1} }
db.posts.update({'permalink' : 'xyz'}, operator);
于 2013-10-01T12:17:10.073 回答