从集合中删除文档并从另一个集合中的数组中删除ID

时间:2016-11-28 04:00:12

标签: arrays node.js mongodb express mongoose

我有一个评论集和一个用户集合。在users集合中,我的文档有一个名为reviews的数组,其中包含来自评论集合的评论的_ids。有时我会去mongo终端并从评论集合中删除我不想要的评论集合中的评论。例如,我会删除所有没有特定字段的内容。问题是我还想删除评论数组中的评论ID。我在评论集合上做了一个简单的db.collection.remove,这很容易。(这将删除50条评论)。我想知道如何轻松地删除评论数组中的ID。有任何想法吗?我使用猫鼬,但我想知道在终端是否有一个简单的方法。我认为唯一的关​​联是ids。

我没有如何使用$ pull但我希望每次删除特定评论时都会将其拉出来。

1 个答案:

答案 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 } }
);