Pendekatan "lewati dan batasi" tidak terlalu efisien saat Anda melakukan paging jauh ke dalam kumpulan data. Ini secara efektif merupakan algoritme Shlemiel the Painter.
Kueri rentang jauh lebih efisien (bila didukung oleh indeks). Misalnya, bayangkan Anda menampilkan tweet. Ukuran halaman Anda adalah 20 dan Anda berada di halaman 1000 dan ingin memuat halaman 1001.
Kueri ini
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
adalah banyak kurang efisien dibandingkan
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(asalkan Anda memiliki indeks di created_at
).
Anda mendapatkan ide:saat Anda memuat halaman, catat stempel waktu dari tweet terakhir dan gunakan untuk menanyakan halaman berikutnya.