从集合中删除文档并从另一个集合中的数组中删除 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的主要内容,如果未能解决你的问题,请参考以下文章
从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值