Jestem bardzo rozczarowany przyjętymi odpowiedziami na to pytanie. To się nie skaluje. Jeśli przeczytasz drobny druk na cursor.skip( ):
Metoda cursor.skip() jest często kosztowna, ponieważ wymaga od serwera przejścia od początku kolekcji lub indeksu w celu uzyskania przesunięcia lub pozycji pominięcia przed rozpoczęciem zwracania wyniku. Wraz ze wzrostem przesunięcia (np. pageNumber powyżej) kursor.skip() będzie wolniejszy i bardziej obciążający procesor. W przypadku większych kolekcji, cursor.skip() może zostać powiązany z IO.
Aby osiągnąć paginację w sposób skalowalny, należy połączyć limit() z co najmniej jednym kryterium filtrowania, data createdOn nadaje się do wielu celów.
MyModel.find( { createdOn: { $lte: request.createdOnBefore } } )
.limit( 10 )
.sort( '-createdOn' )