从集合中删除文档并从另一个集合中的数组中删除Id
问题描述:
我有一个评论集合和一个用户集合。在用户集合中,我拥有一个名为reviews
的文档,其中包含评论集合中的评论的_ids。有时我会去mongo终端,并从评论集中删除我不想从评论集合中获得的评论。例如我会删除所有没有特定字段的东西。问题是我还想删除reviews数组中的评论ID。我在评论集合上做了一个简单的db.collection.remove
,这很简单(这会删除50条评论)。我想知道如何轻松地删除评论数组中的ID。有任何想法吗?我使用猫鼬,但我想知道在终端中是否有一种简单的方法。我认为唯一的协会是IDS。从集合中删除文档并从另一个集合中的数组中删除Id
我不知道如何使用$ pull,但是我想让它在每次删除特定评论时都拉出ID。
答
你肯定不能用单个原子更新来做到这一点,因为你有两个集合要更新。您可以执行两项操作,即从reviews
集合中删除特定评论,然后使用操作员从users
集合中的评论数组中删除值。
以下蒙戈外壳的示例演示这一点:
var reviewIds = [
ObjectId("582ebf010936ac3ba5cd00e2"),
ObjectId("582ebf010936ac3ba5cd00e3"),
...
];
db.reviews.remove({ "_id": { "$in": reviewIds } });
db.users.updateMany(
{ "reviews": { "$in": reviewIds } },
{ "$pullAll": { "reviews": reviewIds } }
);
对于单个评价编号,你可以只使用$pull
操作员
db.reviews.remove({ "_id": reviewId });
db.users.updateMany(
{ "reviews": reviewIds },
{ "$pull": { "reviews": reviewId } }
);
你可以张贴的代码段,你是使用? –