私はこの質問で受け入れられた答えに非常に失望しています。これはスケーリングされません。 cursor.skip()の細字部分を読んだ場合:
cursor.skip()メソッドは、結果を返し始める前に、サーバーがコレクションまたはインデックスの先頭から歩いてオフセットまたはスキップ位置を取得する必要があるため、多くの場合コストがかかります。オフセット(上記のpageNumberなど)が増加すると、cursor.skip()は遅くなり、CPUに負荷がかかります。コレクションが大きくなると、cursor.skip()がIOバウンドになる可能性があります。
スケーラブルな方法でページネーションを実現するには、limit()と少なくとも1つのフィルター基準を組み合わせて、createdOn日付が多くの目的に適しています。
MyModel.find( { createdOn: { $lte: request.createdOnBefore } } )
.limit( 10 )
.sort( '-createdOn' )