2016-11-22 4 views
0

非常に大きなドキュメントのコレクションを改ページしています。私は_idを使ってこれがmongoDBのページ分割の効率的な手段であるかどうか疑問に思っていました。私の関心事は、クエリを作成するたびにIDのコレクション全体をソートしてから結果を返す必要があるということです。私はインデックスを使ってクエリを最適化するこのドキュメントを見ましたが、私が既にインデックスされていると思っていた_idをクエリしているので、これは私に当てはまりますか?このMongoDBクエリをNode.jsのページングに最適化する方法はありますか

ページネーション機能:

function paginateDocs(currId, docsPerPage) { 
    const query = currId ? { _id: { $gt: currId } } : {}; 
    const queryOptions = { limit: usersPerPage, sort: '_id' }; 
    return mongo.find(query, queryOptions).toArray(); 
} 
+0

デフォルトのインデックス '{_id:1}'を選んで、btreeの 'currId'の範囲でドキュメントを探してください。 'mongo.explain(1).find(query、options)'の出力を貼り付けることができます – hyades

+0

これを実稼働環境で実行することができないので、これはもう役に立たないと思っていますか? –

答えて

0

あなたはすべてのインデックスはあなたが上のソートに使用するものとインデックスを定義することができcursor.hint(インデックス)を使用することができます。このリンクを参照してください - > https://docs.mongodb.com/manual/reference/method/cursor.hint/

+0

なぜデフォルトインデックスを無効にしたいのですか? _idのデフォルトでは索引付けされていませんか? –

+0

うんうん、何をすることができるのは、あまりにも多くの文書を持っているので、操作自体をソートすることが非常に重いからです。データベース、キャッシュとして使用されるデータ構造ストアを持つredisに_idsを保持することができます。これにより、クエリがはるかに高速になります。 –

+0

このリンクからredis- –

関連する問題