Over het algemeen wel. Als je een monotoon veld hebt, idealiter een geïndexeerd veld, kun je daar gewoon langs lopen. Als u bijvoorbeeld velden van het type ObjectId
. gebruikt als primaire sleutel of als u een CreatedDate
. heeft of zoiets, je kunt gewoon een $lt
. gebruiken query, neem een vast aantal elementen en zoek opnieuw met $lt
van de kleinste _id
of CreatedDate
die u in de vorige batch bent tegengekomen.
Wees voorzichtig met strikt monotoon gedrag versus niet-strikt monotoon gedrag:mogelijk moet u $lte
gebruiken als de sleutels niet streng zijn, voorkom dan dat je twee keer dingen doet voor de dupes. Sinds de _id
veld is uniek, ObjectIds
zijn altijd strikt monotoon.
Als je zo'n sleutel niet hebt, ligt het wat lastiger. Je kunt nog steeds 'langs de index' itereren (welke index dan ook, of het nu een naam, een hash, een UUID, Guid, etc. is). Dat werkt net zo goed, maar het is moeilijk om snapshots te maken, omdat je nooit weet of het resultaat dat je zojuist hebt gevonden, is ingevoegd voordat je begon te reizen, of niet. Ook wanneer documenten aan het begin van de traversal worden ingevoegd, worden deze gemist.