2016-11-28 85 views
0

我有一個評論集合和一個用戶集合。在用戶集合中,我擁有一個名爲reviews的文檔,其中包含評論集合中的評論的_ids。有時我會去mongo終端,並從評論集中刪除我不想從評論集合中獲得的評論。例如我會刪除所有沒有特定字段的東西。問題是我還想刪除reviews數組中的評論ID。我在評論集合上做了一個簡單的db.collection.remove,這很簡單(這會刪除50條評論)。我想知道如何輕鬆地刪除評論數組中的ID。有任何想法嗎?我使用貓鼬,但我想知道在終端中是否有一種簡單的方法。我認爲唯一的協會是IDS。從集合中刪除文檔並從另一個集合中的數組中刪除Id

我不知道如何使用$ pull,但是我想讓它在每次刪除特定評論時都拉出ID。

+0

你可以張貼的代碼段,你是使用? –

回答

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