5

タイムスタンプのインデックスでソートされた、複数のコレクションにわたって範囲ベースのクエリを実行する効率的な方法はありますか? 基本的に、3 つのコレクションから最新の 30 のドキュメントを取得する必要があります。明らかな方法は、最新の 30 のドキュメントの各コレクションをクエリし、結果をフィルタリングしてマージすることです。しかし、それはやや非効率的です。

クエリのタイムスタンプ フィールドのみを選択し、最新の 30 ドキュメントに対して 2 番目のクエリ バッチを実行したとしても、それがより良いアプローチであるかどうかはわかりません。これは、ページネーション リクエストごとに 90 個のドキュメント (フィールド全体または単一フィールド) になります。

基本的に、クライアントは記事を購読でき、記事の各カテゴリは 0 ~ 2 フィールド異なります。ベータ版でこれまでにユーザーが購読している記事の平均数であるため、3 つを選択しました。分野が異なる可能性があるため、異なるタイプのすべての記事を 1 つのコレクションにまとめても一貫性があるとは思えませんでした。

4

3 に答える 3

0

ここで説明したのと同じアイデアを使用できますが、この投稿は MongoDB テキスト検索に関連していますが、あらゆる種類のクエリに適用されます

集約フレームワークでテキスト検索を使用する場合の MongoDB インデックスの最適化

アイデアは、すべてのコレクションを日付と ID で並べ替えてクエリを実行し、結果を並べ替え/混合して最初のページを返すことです。後続のページは、前のページの最後のドキュメントの日付と ID を使用して取得されます。

于 2015-11-17T16:57:26.627 に答える