La clasificación de rangos debería funcionar bien para usted. Primera solicitud tomará primeros 10 elementos ordenados por fecha:
db.articles.find({}).sort({ date : -1 }).limit(10);
Después de esto se necesita almacenar en algún lugar la fecha del último elemento y utilizar id en la próxima solicitud de localización:
db.articles.find({"date": {$lt: storedDateOfLastItem}}).sort({ date : -1 }).limit(10);
lo tanto, supongo que debería trabaja bien para ti Para estimar el recuento total de páginas, deberá usar count.
Pero parece fallar si se eliminan algunos de los elementos ordenados.
Si va a eliminar, por ejemplo, el artículo de la página n. ° 1, con seguridad romperá la página n. ° 2 debido a que la última fecha almacenada se modificará. Para evitar esto se puede estimar el recuento de elementos que fue salvado antes de la fecha actual
db.articles.find({"date": {$gt: storedDateOfLastItem}}).sort({ date : -1 }).count()
Si esta cuenta se ha cambiado (vamos a decir 2 articled fue eliminado). Usted necesita actualizado storedDateOfLastItem
db.articles.find({"date": {$gt: storedDateOfLastItem}}).sort({ date : -1 }).take(2)
Una vez más tomar storedDateOfLastItem del último elemento de la mencionada solicitud y continuar a hacer paginación.
Pero mi opinión solo es mantener esta paginación sin lógica adicional, porque supongo que la eliminación del artículo es una operación rara.
De la documentación mongodb:
Costos de paginación Desafortunadamente skip puede ser (muy) costoso y requiere el servidor a pie desde el inicio de la recolección, o el índice, para obtener al desplazamiento de posición/saltar antes de que pueda comenzar a devolver la página de datos (límite). A medida que el número de página aumenta, el salto se volverá más lento y más intensivo en la CPU, y posiblemente IO obligado, con colecciones más grandes.
La paginación basada en rangos proporciona un mejor uso de los índices pero no permite que salte fácilmente a una página específica.
Acepte la respuesta y cierre esta pregunta – beNerd