我有以下文件:
{
_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"]
中的所有文档,并删除其userId
为59edd922df2339579fc2a528
的子文档。我想在一个查询中从特定文档(文档数组)中删除特定用户的所有喜欢。
循环通过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);
}
});
我想要的是传递一个post id数组,并在所有匹配的文档中拉出特定用户的喜欢。
答案 0 :(得分:1)
试试这个:
post.update(
{
_id: {
$in: [
ObjectId("59e4540bf14f1607b90ffb83"),
ObjectId("59e4540bf14f1607b90ffb81")
]
}
},
{
$pull: {
likedBy: {
$or: [
{ userId: ObjectId("59edd922df2339579fc2a448") },
{ userId: ObjectId("59edd922df2339579fc2a528") }
]
}
}
},
{
multi: true
},
function(err, rawResponse) {
/*...*/
}
);