2016-11-28 11 views
0

私はレビューコレクションとユーザーコレクションを持っています。ユーザーコレクションには、レビューコレクションのレビューの_idsを含むreviewsという配列を持つドキュメントがあります。時々私はmongoターミナルに行き、レビューコレクションから、私がレビューコレクションから望まないレビューを削除します。たとえば、特定のフィールドを持たないものをすべて削除します。問題は、レビュー配列のレビューIDを削除したいということです。私はレビュー集に簡単にdb.collection.removeを書いていますので、簡単です(50件のレビューのように削除されます)。レビュー配列のIDを簡単に削除する方法が不思議でした。何か案は?私はマングースを使用していますが、ターミナルで簡単な方法があるかどうか疑問に思っていました。私は唯一の関連はIDだと思う。コレクションから文書を削除し、別のコレクションの配列からIDを削除します。

私は$ pullを使用する方法はありませんが、特定のレビューが削除されるたびにIDをプルするようにしたいと考えています。

+0

として$pull演算子を使用することができ、あなたがしているコードの断片を投稿することができますを使用して? –

答えて

0

アップデートするコレクションが2つあるため、アトミックアップデートを1つだけ行うことはできません。できることは、reviewsコレクションから特定のレビューを削除してから、$pullAll演算子を使用してusersコレクションのレビュー配列から値を削除するという2つの操作を連続して実行することです。

次のmongoシェルの例は、この例を示しますシングルレビューIDの

var reviewIds = [ 
    ObjectId("582ebf010936ac3ba5cd00e2"), 
    ObjectId("582ebf010936ac3ba5cd00e3"), 
    ... 
]; 

db.reviews.remove({ "_id": { "$in": reviewIds } }); 
db.users.updateMany(
    { "reviews": { "$in": reviewIds } }, 
    { "$pullAll": { "reviews": reviewIds } } 
); 

を、あなただけの

db.reviews.remove({ "_id": reviewId }); 
db.users.updateMany(
    { "reviews": reviewIds }, 
    { "$pull": { "reviews": reviewId } } 
); 
関連する問題