我有一个评论集和一个用户集合。在users集合中,我的文档有一个名为reviews
的数组,其中包含来自评论集合的评论的_ids。有时我会去mongo终端并从评论集合中删除我不想要的评论集合中的评论。例如,我会删除所有没有特定字段的内容。问题是我还想删除评论数组中的评论ID。我在评论集合上做了一个简单的db.collection.remove
,这很容易。(这将删除50条评论)。我想知道如何轻松地删除评论数组中的ID。有任何想法吗?我使用猫鼬,但我想知道在终端是否有一个简单的方法。我认为唯一的关联是ids。
我没有如何使用$ pull但我希望每次删除特定评论时都会将其拉出来。
答案 0 :(得分:0)
由于您有两个要更新的集合,因此您无法使用单个原子更新执行此操作。您可以做的是串联执行两项操作,即从reviews
集合中删除特定评论,然后使用 $pullAll
运算符从评论数组中删除值在users
集合中。
以下mongo shell示例显示了这一点:
var reviewIds = [
ObjectId("582ebf010936ac3ba5cd00e2"),
ObjectId("582ebf010936ac3ba5cd00e3"),
...
];
db.reviews.remove({ "_id": { "$in": reviewIds } });
db.users.updateMany(
{ "reviews": { "$in": reviewIds } },
{ "$pullAll": { "reviews": reviewIds } }
);
对于单个评论ID,您只需使用 $pull
运算符
db.reviews.remove({ "_id": reviewId });
db.users.updateMany(
{ "reviews": reviewIds },
{ "$pull": { "reviews": reviewId } }
);