L'approccio "salta e limita" non è molto efficiente quando si esegue il paging lontano nel set di dati. È effettivamente un algoritmo di Shlemiel il pittore.
Le query di intervallo sono molto più efficienti (se supportate da indici). Ad esempio, immaginiamo di visualizzare i tweet. La dimensione della tua pagina è 20 e sei a pagina 1000 e desideri caricare la pagina 1001.
Questa domanda
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
è molto meno efficiente di
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(a condizione che tu abbia l'indice su created_at
).
Ti viene l'idea:quando carichi una pagina, prendi nota del timestamp dell'ultimo tweet e usalo per interrogare la pagina successiva.