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

如何将新元素作为一个数组推送到子文档Post>Comments>repress>likes中

姜淇
2023-03-14

我有一个样本Post收藏

[{
    "_id" : ObjectId("5da832caeb173112348e509b"),
    "body" : "Lorem Ipsu.",
    "comments" : [ 
        {
            "comment" : "my sample comment",
            "_id" : ObjectId("5db06e11d0987d0aa2cd5593"),
            "replies" : [ 
                {
                    "likes" : [ 
                        "5d999578aeb073247de4bd6e", 
                        "5da85558886aee13e4e7f044"
                    ],

                    "_id" : ObjectId("5db6a88f7c6cfb0d0c2b689b"),
                    "reply" : "my reply to this comment",
                    "user" : "5da85558886aee13e4e7f044"
                }
            ],

            "likes" : [ 
                "5da85558886aee13e4e7f044",
            ]
        }, 

    ],

}]

在注释中添加或删除元素。喜欢我可以这样做,$推$拉,它与下面的操作一起工作。

   Post.updateOne(
     {_id: req.body.id_post, "comments._id": req.body.id_comment},
     { $push: {"comments.$.likes": req.user._id}});

但是如果我想将推送replies.likes中,有人能帮助指导我吗?

我尝试过类似的方法,但得到了回复。不会更新likes。

 db.posts.updateOne(
    { "comments.replies._id": Object("5db6a88f7c6cfb0d0c2b689b") },
    { "$push": { "comments.0.replies.$.likes": Object("5db6a88f7c6cfb0d0c2b689a") } },
    function(err,numAffected) {
       // something with the result in here
    }
);

共有1个答案

邹修真
2023-03-14

您可以使用阵列筛选器:

db.getCollection("test").updateOne(
  {
    "comments.replies": {
      "$elemMatch": {
        "_id": Object("5db6a88f7c6cfb0d0c2b689b")
      }
    }
  },
  { "$set": { "comments.$[outer].reply.$[inner].likes": Object("5db6a88f7c6cfb0d0c2b689a") } },
  {
    "arrayFilters": [
      { "outer._id": ObjectId("5cd26a886458720f7a66a413") },
      { "inner._id": ObjectId("5cd26a886458720f7a66a415") }
    ]
  }
)

不要介意ID

 类似资料:
  • 如何更新数组元素子文档中的特定字段? 我的问题类似于下面的问题,但是在我的例子中,我只需要更新一个子文档值。 MongoDB:如何更新数组中由数组中的索引引用的单个子元素? 我有以下文档模型: 所以,在mongodb shell中,以下语句非常适合我: 然而,当我尝试使用MongoJava驱动程序时,我会得到一个IllegalArgumentException。 它会引发以下异常: 我的代码有问题

  • 我想在每次单击按钮时使用jquery添加一个div作为第一个元素

  • 问题内容: 假设我有以下文件 我想将文档中具有代码“ efg”的所有元素的数量更改为0。我该怎么做?我应该对位置运算符使用循环吗? 问题答案: 最好的方法是匹配数组元素,并 使用 API 使用位置运算符分别进行更新。您真的不应该吹牛。

  • 我有这样的数据响应 然后我想把颜色推到物品里面 预期:每个索引项有三(3)个变量 我尝试使用push和concat,但出现错误“无法读取未定义的属性“数据” 这是我的密码

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

  • 我对mongodb中的聚合概念相对陌生。在我的文档中,有一个数组。我尝试用$match,$unwind,$group来提取数组中有两个给定值的文档。我猜写上去没什么帮助..这是样品 文件: 从这些文档中,我需要提取一个具有“类:1”和“主题[”物理“,”英语“]的文档 所以,如果我正确地编写了查询(或聚合),我应该从上面提取第二个文档。 这是我所拥有的 好吧,上面的聚合没有给我任何反馈,所以我尝试