クエリで孤立した参照を見つける簡単な方法はありますか? 親参照を持つ要素のコレクションがあります。一部の親が削除された後、それらを指す要素、つまりぶら下がっている参照を持つ要素を検索したいと思います。
さまざまな構文を試しましたが、どれも機能しませんでした。
仮定:
parentCollection
、childCollection
childCollection.parentRefId
。次に、次のコマンドを mongo に発行することで、ぶら下がっているすべての子オブジェクトを削除できます。
db.childCollection.find().forEach(function(f) {
if(f.parentRefId && !db.parentCollection.findOne({ _id: f.parentRefId})) {
db.childCollection.remove({ parentRefId: f.parentRefId });
}
});
db.childCollection.find().forEach(function(f) {
if(f.refKey && db.parentCollection.find({ "_id": f.refKey.$id}).count() != 1) {
db.childCollection.remove({ _id: f._id });
}
});
これは私にとって非常に平和的に機能しました..
いいえ、そうではありません。mongodb は非リレーショナルであるため、すべての関係を自分で見つける必要があります。すべてのドライバーは、参照を要求することによってクライアント側で参照を解決します。あなたの場合、すべてのカテゴリを調べて、親が存在しない場合は親を読み込もうとする必要があります-子を削除するか、好きなことをしてください。dbrefドキュメント