1

クエリで孤立した参照を見つける簡単な方法はありますか? 親参照を持つ要素のコレクションがあります。一部の親が削除された後、それらを指す要素、つまりぶら下がっている参照を持つ要素を検索したいと思います。

さまざまな構文を試しましたが、どれも機能しませんでした。

4

3 に答える 3

5

仮定:

  • 親コレクションは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 });
    }
});
于 2013-06-24T14:01:40.037 に答える
0
db.childCollection.find().forEach(function(f) {
    if(f.refKey && db.parentCollection.find({ "_id": f.refKey.$id}).count() != 1) {
        db.childCollection.remove({ _id: f._id });
    }
});

これは私にとって非常に平和的に機能しました..

于 2016-12-26T20:10:21.603 に答える
0

いいえ、そうではありません。mongodb は非リレーショナルであるため、すべての関係を自分で見つける必要があります。すべてのドライバーは、参照を要求することによってクライアント側で参照を解決します。あなたの場合、すべてのカテゴリを調べて、親が存在しない場合は親を読み込もうとする必要があります-子を削除するか、好きなことをしてください。dbrefドキュメント

于 2011-10-13T08:18:28.220 に答える