当前位置: 首页 > 知识库问答 >
问题:

更新mongodb中嵌套数组文档中的第n个文档

金英华
2023-03-14

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


    {
            "_id" : ObjectId("51cff693d342704b5047e6d8"),
            "author" : "test",
            "body" : "sdfkj dsfhk asdfjad ",
            "comments" : [
                    {
                            "author" : "test",
                            "body" : "sdfkjdj\r\nasdjgkfdfj",
                            "email" : "test@tes.com"
                    },
                    {
                            "author" : "hola",
                            "body" : "sdfl\r\nhola \r\nwork here"
                    }
            ],
            "date" : ISODate("2013-06-30T09:12:51.629Z"),
            "permalink" : "jaiho",
            "tags" : [
                    "jaiho"
            ],
            "title" : "JAiHo"
    }


Q1) Update email of 0th element of comments array
db.posts.update({"permalink" : "haha"},{$set:{"comments.0.email":1}})
This doesn't throw any exception but doesn't update anything as well
Q2) Add a field on nth element of comments array number_likes
db.posts.update({"permalink" : "haha"},{$inc:{"comments.0.num_likes":1}})
Doesn't work either.

Am I missing something here?

共有2个答案

佘辰龙
2023-03-14

如果您尝试在节点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);
颛孙高义
2023-03-14

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

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

问题2:这包括这一点也是如此;

> db.posts.update({"permalink" : "jaiho"},{$inc:{"comments.0.num_likes":1}})
> db.posts.find()
    ..., "num_likes" : 1 },...
 类似资料:
  • 我想在具有指定 URL 的相应文档中将嵌套的“已爬行”更新为 True。 我对mongodb相当陌生,我似乎无法弄清楚这一点,非常感谢任何帮助。

  • 将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?

  • 本文向大家介绍MongoDB查询中如何更新嵌套文档,包括了MongoDB查询中如何更新嵌套文档的使用技巧和注意事项,需要的朋友参考一下 要更新嵌套文档,请使用update(),并在其中使用点号。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是更新嵌套文档的查询- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 假设我们有以下集合,我对此没有什么问题: > 我想增加“item_name”的价格:“my_item_two”,如果它不存在,应该将它追加到“items”数组中。

  • 我有一个深度嵌套的文档结构,如下所示: 我正在尝试更新集合以插入新配置,如下所示: 我正在mongo(Python)中尝试类似的内容: 但是,我得到了“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在mongo这样做的正确方式是什么?这是mongo v2。4.1.

  • 问题内容: 我有以下mongodb文件结构: 我已经能够使用$ elemMatch来更新操作中的字段,但是当我尝试对参数执行相同的操作(修改)时,它似乎不起作用。我想知道我应该尝试哪种其他方法,以便能够成功更新特定参数中的字段(通过其pid查找)。 我当前拥有但不起作用的更新代码如下所示: 问题答案: MongoDB 3.6及更高版本 MongoDB3.6及更高版本提供了一项新功能,该功能允许您使