Imagine una situación en la que un cliente se alimenta de objetos con un límite de 10.
Cuando se requieren los siguientes 10, envía una solicitud con omisión de 10 y límite de 10.
Pero, ¿qué sucede si se agregaron (o eliminaron) algunos objetos nuevos a la colección desde la primera solicitud con compensación == 0?
Luego, en la segunda solicitud (con desplazamiento == 10), la respuesta puede tener un orden de objetos incorrecto.
La clasificación en el momento de su creación no funciona aquí, porque tengo algunos feeds que se forman al clasificar a través de algún campo numérico.
Realmente depende de lo que quieras que sea el resultado.
Si desea que los objetos originales estén en su orden original, independientemente de las operaciones Eliminar y Agregar, debe hacer una copia de la lista (o al menos del orden) y luego hojearlo. Copie cada Id a una nueva colección que no cambia una vez que la página se ha cargado y luego pagina a través de eso.
Alternativamente, y quizás más probablemente, lo que desea es ver los siguientes 10 después del último en el conjunto actual, incluidas las operaciones Eliminar o Agregar que se hayan realizado desde entonces. Para esto, puede usar el orden en el que los está viendo y un filtro, $gt cualquiera que sea el último elemento. PERO eso no funciona cuando hay duplicados en el campo en el que está ordenando. Para evitarlo, deberá indexar ese campo MÁS algún otro campo que sea único por registro, por ejemplo, el campo _id. Ahora, puede tomar el último registro del primer conjunto y buscar registros que sean $eq el valor indexado y $gt el _id O simplemente $gt el valor indexado.
Puede agregar un campo de tiempo como created_at o updated_at. Debe actualizarse cada vez que se crea o modifica el documento y el campo debe ser único.
Luego consulte la base de datos para el rango de tiempo usando $gte y $lte junto con una ordenación en este campo de tiempo.
Esto garantiza que los cambios realizados fuera de la ventana de tiempo no se reflejen en la paginación, siempre que el campo de tiempo no tenga duplicados. Lo más probable es que si incluye microtiempo, no se produzcan duplicados.