In generale, sì. Se hai un campo monotono, idealmente un campo indicizzato, puoi semplicemente percorrerlo. Ad esempio, se stai utilizzando campi di tipo ObjectId
come chiave primaria o se hai un CreatedDate
o qualcosa del genere, puoi semplicemente usare un $lt
interroga, prendi un numero fisso di elementi, quindi interroga di nuovo usando $lt
del più piccolo _id
o CreatedDate
che hai incontrato nel batch precedente.
Fai attenzione al comportamento monotono rigoroso rispetto al comportamento monotono non rigoroso:potresti dover usare $lte
se le chiavi non sono rigide, evita di fare le cose due volte sui duplicati. Dal momento che il _id
il campo è univoco, ObjectIds
sono sempre rigorosamente monotoni.
Se non hai una tale chiave, le cose sono un po' più complicate. Puoi ancora scorrere "lungo l'indice" (qualunque indice, sia esso un nome, un hash, un UUID, Guid, ecc.). Funziona altrettanto bene, ma è difficile fare snapshot, perché non sai mai se il risultato che hai appena trovato è stato inserito prima di iniziare ad attraversare, oppure no. Inoltre, quando i documenti vengono inseriti all'inizio dell'attraversamento, quelli andranno persi.