「スキップアンドリミット」アプローチは、データセットに深くページングしている場合はあまり効率的ではありません。これは事実上、画家のアルゴリズムであるシュレミエルです。
範囲クエリははるかに効率的です(インデックスでサポートされている場合)。たとえば、ツイートを表示しているとしましょう。ページサイズが20で、ページ1000にいて、ページ1001をロードしたい。
このクエリ
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
多い
よりも効率が悪いdb.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(created_at
にインデックスがある場合 。
ページをロードするときに、最後のツイートのタイムスタンプをメモし、それを使用して次のページをクエリするというアイデアが得られます。