1

グローバル検索とは、指定されたコレクション内のドキュメントを検索することです。たとえば、ユーザー コレクションと組織コレクションの両方で名前を検索すると、条件に一致するユーザー ドキュメントと組織ドキュメントの両方が返されます。

ユーザーと組織のドキュメントを別のコレクションに単純にコピーして、その中で検索することはできますか?

4

1 に答える 1

2

いいえ、複数コレクションを自動的に検索することはできません。ただし、複数のコレクションに対して同じクエリを実行して結果を結合できない理由はありません。

クエリ目的でデータを別のコレクションに複製することもできますが、ソース コレクションの値が「インデックス」コレクションと完全に一致することを保証する必要がある場合は、独自のマルチフェーズ トランザクション () を MongoDb として実装する必要があります。マルチコレクションのアトミック コミットはありません。または、「インデックス」テーブルが同期していない可能性があるという事実を受け入れることができます。もちろん、カスタム コードを使用して定期的に更新することもできます。さらに、データを二重に保存しているため、ワーキング セットが増加したことを意味します。また、(より多くのソース ドキュメントを取得するために) 個々のコレクションからデータを取得する必要がある場合、そもそも複数のクエリを実行する場合と比較して、何も得られず、状況が悪化します。

関連するドキュメントを同じコレクションに保存し、提供されている組み込みのインデックスを利用できます。もちろん、これには注意が必要です。ドキュメントが型付けされている場合、効率的な MongoDb インデックスを構築するのがより困難になる可能性があります。すべての変更/新規ドキュメントはインデックス作成パイプラインを通過する必要があるため、大きなオーバーヘッドが発生する可能性があります。

コレクションが数個しかない場合は、要件をより深く理解することなく、複数の検索を行うだけです。そうでない場合、2 番目に良い方法は、ドキュメントを 1 つのコレクションに結合することです。最後の選択肢は、データをコピーすることです。

于 2013-09-20T11:05:55.710 に答える