Подходът на "пропускане и ограничаване" не е много ефективен, когато прелиствате далеч в набор от данни. Това всъщност е алгоритъмът на художника Шлемиел.
Заявките за диапазон са много по-ефективни (когато се поддържат от индекси). Например, нека си представим, че показвате туитове. Размерът на вашата страница е 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
).
Разбирате идеята:когато заредите страница, отбележете клеймото за дата на последния туит и го използвайте, за да направите заявка за следващата страница.