El enfoque de "omitir y limitar" no es muy eficiente cuando se está paginando en un conjunto de datos. Es efectivamente un algoritmo de Shlemiel el Pintor.
Las consultas de rango son mucho más eficientes (cuando son compatibles con índices). Por ejemplo, imaginemos que está mostrando tweets. El tamaño de tu página es 20 y estás en la página 1000 y quieres cargar la página 1001.
Esta consulta
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
es mucho menos eficiente que
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(siempre que tenga un índice en created_at
).
Entiende la idea:cuando cargues una página, toma nota de la marca de tiempo del último tweet y utilízala para consultar la página siguiente.