L'approche "sauter et limiter" n'est pas très efficace lorsque vous naviguez loin dans l'ensemble de données. Il s'agit en fait d'un algorithme de Shlemiel le Peintre.
Les requêtes de plage sont beaucoup plus efficaces (lorsqu'elles sont prises en charge par des index). Par exemple, imaginons que vous affichez des tweets. La taille de votre page est de 20 et vous êtes à la page 1000 et souhaitez charger la page 1001.
Cette requête
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
est beaucoup moins efficace que
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(à condition que vous ayez un index sur created_at
).
Vous avez compris :lorsque vous chargez une page, notez l'horodatage du dernier tweet et utilisez-le pour interroger la page suivante.