"overslaan en beperken"-benadering is niet erg efficiënt wanneer u ver in de gegevensset bladert. Het is in feite een algoritme van Shlemiel de Schilder.
Bereikquery's zijn veel efficiënter (indien ondersteund door indexen). Laten we ons bijvoorbeeld voorstellen dat u tweets weergeeft. Uw paginagrootte is 20 en u bevindt zich op pagina 1000 en wilt pagina 1001 laden.
Deze vraag
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
is veel minder efficiënt dan
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(mits je een index hebt op created_at
).
U snapt het idee:wanneer u een pagina laadt, noteert u de tijdstempel van de laatste tweet en gebruikt u deze om de volgende pagina te doorzoeken.