Как я могу вставить новый элемент в поддокумент Post> Комментарии> Ответы> Like в виде массива - PullRequest
1 голос
/ 28 октября 2019

У меня есть образец 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",
            ]
        }, 

    ],

}]

В add или remove элемент в comments.likes Я могу сделать так, $push или $pull, он работает сэта операция ниже.

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

Но если я хочу push в replies.likes, кто-нибудь может помочь мне?

Я пробовал что-то подобное, но replies.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 Ответ

1 голос
/ 28 октября 2019

Вы можете использовать фильтр массива:

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") }
    ]
  }
)

не обращайте внимания на идентификаторы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...