A abordagem "pular e limitar" não é muito eficiente quando você está paginando muito no conjunto de dados. É efetivamente um algoritmo de Shlemiel, o Pintor.
As consultas de intervalo são muito mais eficientes (quando suportadas por índices). Por exemplo, vamos imaginar que você está exibindo tweets. O tamanho da sua página é 20 e você está na página 1000 e deseja carregar a página 1001.
Esta consulta
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
é muito menos eficiente do que
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(desde que você tenha índice em
created_at
). Você entendeu:quando você carrega uma página, anote o timestamp do último tweet e use-o para consultar a próxima página.