mongo データベースとその中にいくつかのコレクションがあります。たとえば、target_id に一致するすべてのエントリをコレクションから削除したいと考えています。秘訣は、target_id に一致するエントリに「接続された」エントリも削除する必要があることです。
例えば
DB
Culture (_id, owner_id)
Document (_id, target_id)
Entity (_id, target_id)
Field (_id, entity_id)
Form (_id, target_id)
Question (_id, form_id)
Layout (_id, question_id)
これで、すべてのドキュメントを簡単に削除できます
db.Document.remove( {"_id": ObjectId(target_id)});
したがって、最初のトリッキーな部分は、Culture コレクションの一部のエントリに owner_id = document_id が含まれている可能性があることです。したがって、エンティティ エントリを削除する前に、カルチャ エントリも削除する必要があります。
2 番目の問題は、フィールド コレクションの target_id エントリで直接アクセスできないことです。これらのフィールドは entity_id で見つけることができるためです。
したがって、target_id を提供する mongo シェルから実行するスクリプト/クエリを作成し、target_id によって直接的または間接的に「参照」されるすべてのエントリを削除したいと思います。IDによる単純な検索/削除以外の経験がなかったため、このクエリはスタックしました。
私が理解している限り、これを段階的に行うことができます。たとえば、最初にすべてのエンティティを見つけます。
db.Entity.find({ "$where" : "{"target_id" : ObjectId(target_id)}" });
2 番目のステップは、上記のクエリからすべてのエンティティの owner_id = エンティティ ID を持つすべてのカルチャを削除することです。どうすれば走れますか
db.Culture.find({ "$where" : "{"owner_id" : ObjectId(entity_id)}" });
entity_id が最初のクエリですべてのエンティティを反復処理する場所は?