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

问题描述:

我有一个评论集合和一个用户集合。在用户集合中,我拥有一个名为reviews的文档,其中包含评论集合中的评论的_ids。有时我会去mongo终端,并从评论集中删除我不想从评论集合中获得的评论。例如我会删除所有没有特定字段的东西。问题是我还想删除reviews数组中的评论ID。我在评论集合上做了一个简单的db.collection.remove,这很简单(这会删除50条评论)。我想知道如何轻松地删除评论数组中的ID。有任何想法吗?我使用猫鼬,但我想知道在终端中是否有一种简单的方法。我认为唯一的协会是IDS。从集合中删除文档并从另一个集合中的数组中删除Id

我不知道如何使用$ pull,但是我想让它在每次删除特定评论时都拉出ID。

+0

你可以张贴的代码段,你是使用? –

你肯定不能用单个原子更新来做到这一点,因为你有两个集合要更新。您可以执行两项操作,即从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 } } 
);