En general, sí. Si tiene un campo monótono, idealmente un campo indexado, simplemente puede caminar a lo largo de eso. Por ejemplo, si está utilizando campos de tipo ObjectId
como clave principal o si tiene una CreatedDate
o algo así, simplemente puede usar un $lt
consulta, toma un número fijo de elementos, luego vuelve a consultar usando $lt
del menor _id
o CreatedDate
que encontraste en el lote anterior.
Tenga cuidado con el comportamiento monotónico estricto frente al comportamiento monotónico no estricto:es posible que deba usar $lte
si las claves no son estrictas, evite hacer las cosas dos veces con los incautos. Desde el _id
el campo es único, ObjectIds
son siempre estrictamente monótonas.
Si no tiene esa clave, las cosas son un poco más complicadas. Todavía puede iterar 'a lo largo del índice' (cualquier índice, ya sea un nombre, un hash, un UUID, Guid, etc.). Eso funciona igual de bien, pero es difícil hacer instantáneas, porque nunca se sabe si el resultado que acaba de encontrar se insertó antes de comenzar a recorrer o no. Además, cuando se inserten documentos al comienzo del recorrido, estos se perderán.