2011-07-24 14 views
11

それは言う: (source)範囲ベースのページングMongoDBの

残念ながらスキップは(非常に)高価なこととに到達するために、 コレクションの先頭から徒歩、またはインデックスにサーバを必要とすることができます オフセット/スキップ位置の前にデータのページを返すことができます (制限)。ページ番号が増えるにつれてスキップが遅くなり、より多くのコレクションで CPUが集中し、おそらくIOバウンドになります。範囲 ベースのページングではインデックスの使用率が向上しますが、 では特定のページに簡単にジャンプできません。

範囲ベースのページングとは何ですか、そのドキュメントはどこですか?

答えて

17

基本的な考え方は、ページングをクエリ述語パターンに書き込むことです。

たとえば、フォーラムの投稿を日付順にリストし、次のページを表示する場合は、現在のページの最後の投稿の日付を述語として使用します。 MongoDBは、日付フィールドに作成されたインデックスを使用できます。

//older posts 
db.forum_posts.find({date: {$lt: ..last_post_date..} }).sort({date: -1}).limit(20); 

もちろん、ソートに使用しているフィールドが一意でない場合、これは少し複雑になります。

+0

おかげさまで、前と後の10を取得するにはどうすればよいですか? – Harry

+0

例は "次の10"要素を取得する方法を示し、 "前の10"は似ています。 '{$ gt:..first_post_on_page_date ..} 'を使用してください。 –

+0

日付フィールドにインデックスを付けることを忘れないでください。 – Maxence