2016-07-19 9 views
0

フィールド別にすべてのドキュメントを並べ替えたいx(複数のドキュメントでが同じフィールドにある)その後、「次へ」を押すたびに、10個のドキュメントが読み込まれます。mongodbのページングを効率化する方法

複数のドキュメントが同じ値を持っている場合、彼らは、それは問題ではないものは何でもそれらの間の順序で表示することができます。

skip()は大きなデータセットでは効率が悪いので、これを効率的に行う方法はありますか?ページ番号は必要ありません。無限のスクロールのみです。

答えて

0

ページ番号を必要としない場合は、単調に増加するユニークidの値を利用できます。 _idObjectId()などです。あなたの例を使用して

/* Value of first scroll record, and to be updated every iteration */ 
var current_id; 

var scroll_size = 10; 

db.collection.find({_id: {$lt: current_id}}). 
        limit(scroll_size). 
        sort({ 
          _id: -1, 
          x: 1 // Depending on your use case 
        }); 

を上記の例では、あなたの最も最近のレコードを提供します。あなたのユースケースに応じて、新しく挿入されたドキュメントをどうするかを決める必要があります。

_id以外のフィールドを使用してスクロールする場合は、フィールドに適切なindexesを追加してください。

+0

しかし、これはxでソートされたレコードを提供していませんか?これは_idでソートされます。 – Saitama

+0

'sort()'の例で分かるように、結果は '_id'と' x'の両方でソートされます。また、A)「_id」と一緒に「x」をマッチング部分に含めるか、またはB)マッチング部分に「x」だけを使用することもできます。 'x'の値は? –

関連する問題