Mongoose如何通过一系列ID查找并提取其特定的子文档



我有以下文档:

{
   _id: ObjectId("59e4540bf14f1607b90ffb81"),
   likedBy: [
     {
        "userId" : ObjectId("59edd922df2339579fc2a528"),
        "_id" : ObjectId("5a13c199f93b7ab1004c4318")
     },
     {
        "userId" : ObjectId("59edd922df2339579fc2a448"),
        "_id" : ObjectId("5a13c199f93b7ab1004c4412")
     }
   ]
},
{
   _id: ObjectId("59e4540bf14f1607b90ffb83"),
   likedBy: [
     {
        "userId" : ObjectId("59edd922df2339579fc2a528"),
        "_id" : ObjectId("5a13c199f93b7ab1004c4323")
     },
     {
        "userId" : ObjectId("59edd922df2339579fc2a448"),
        "_id" : ObjectId("5a13c199f93b7ab1004c6423")
     }
   ]
}

我想做的就是找到所有文档中的ID在["59e4540bf14f1607b90ffb81", "59e4540bf14f1607b90ffb83"]中,然后删除其userId59edd922df2339579fc2a528的子记录。我想从一个查询中删除特定文档(文档数组)中的所有特定用户。通过循环浏览ID数组,我可以执行,但是我想通过ID并拉动。我当前的查询与一个ID一起工作:

post
  .findByIdAndUpdate(postId, {$pull: {likedBy: {userId: userId}}}, {new: true}, function (err, post) {
    if (err) {
      sendJsonResponse(res, 404, err);
    } else {
      sendJsonResponse(res, 204, post);
    }
  });

我想在所有匹配的文档中传递一系列帖子ID并拉动特定用户。

尝试以下:

post.update(
    {
        _id: {
            $in: [
                ObjectId("59e4540bf14f1607b90ffb83"),
                ObjectId("59e4540bf14f1607b90ffb81")
            ]
        }
    },
    {
        $pull: {
            likedBy: {
                $or: [
                    { userId: ObjectId("59edd922df2339579fc2a448") },
                    { userId: ObjectId("59edd922df2339579fc2a528") }
                ]
            }
        }
    },
    {
        multi: true
    },
    function(err, rawResponse) {
        /*...*/
    }
);

最新更新