【问题标题】:update nth document in a nested array document in mongodb在 mongodb 的嵌套数组文档中更新第 n 个文档
【发布时间】:2013-06-30 10:02:41
【问题描述】:

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

{ “_id”:ObjectId(“51cff693d342704b5047e6d8”), “作者”:“测试”, “正文”:“sdfkj dsfhk asdfjad”, “cmets”:[ { “作者”:“测试”, “正文”:“sdfkjdj\r\nasdjgkfdfj”, “电子邮件”:“test@tes.com” }, { “作者”:“你好”, "body" : "sdfl\r\nhola \r\n在这里工作" } ], “日期”:ISODate(“2013-06-30T09:12:51.629Z”), “永久链接”:“jaiho”, “标签”:[ “杰霍” ], “标题”:“JAiHo” } Q1) 更新 cmets 数组第 0 个元素的电子邮件 db.posts.update({"permalink" : "haha"},{$set:{"cmets.0.email":1}}) 这不会引发任何异常,但也不会更新任何内容 Q2) 在 cmets 数组 number_likes 的第 n 个元素上添加一个字段 db.posts.update({"permalink" : "haha"},{$inc:{"cmets.0.num_likes":1}}) 也不行。 我在这里错过了什么吗?

【问题讨论】:

  • 大声笑,这几乎可以肯定来自 10gen mongo 课程:P education.10gen.com/courses
  • 实际上是的,但找不到解决方案出了什么问题,也不想通过测试;)您可能将其视为作弊,但可能我仍在学习。
  • 不,一切都很好。它只是让我发笑。

标签: arrays mongodb updates


【解决方案1】:

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 },...

【讨论】:

    【解决方案2】:

    如果您尝试在 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);
    

    【讨论】:

    • 感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 2013-03-19
    • 2016-11-23
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2010-11-11
    • 2017-06-05
    相关资源
    最近更新 更多