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

Posted

技术标签:

【中文标题】从集合中删除文档并从另一个集合中的数组中删除 Id【英文标题】:Delete documents from collection and remove Ids from an array in another collection 【发布时间】:2017-04-11 17:49:40 【问题描述】:

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

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

【问题讨论】:

你能贴出你正在使用的代码吗? 【参考方案1】:

您当然不能通过单个原子更新来执行此操作,因为您有两个要更新的集合。您可以做的是串行执行两个操作,即从 reviews 集合中删除特定评论,然后使用 $pullAll 运算符从 @987654325 中的评论数组中删除值@ 收藏。

以下 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  
);

【讨论】:

以上是关于从集合中删除文档并从另一个集合中的数组中删除 Id的主要内容,如果未能解决你的问题,请参考以下文章

比较 C# 中的字符串片段并从集合中删除项目

从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值

从 Mongo DB 文档的数组中的对象数组中删除一个值

引用了 Firestore 如何从另一个集合文档 id 中获取集合值

使用匹配的查询从每个集合中删除所有文档

使用匹配的查询从每个集合中删除所有文档