Generell ja. Wenn Sie ein monotones Feld haben, idealerweise ein indiziertes Feld, können Sie einfach daran entlang gehen. Wenn Sie beispielsweise Felder vom Typ ObjectId
verwenden als Primärschlüssel oder wenn Sie ein CreatedDate
haben oder so, Sie können einfach ein $lt
verwenden Abfrage, nehmen Sie eine feste Anzahl von Elementen und fragen Sie dann erneut mit $lt
ab der kleinsten _id
oder CreatedDate
denen Sie im vorherigen Batch begegnet sind.
Seien Sie vorsichtig mit streng monotonem Verhalten gegenüber nicht streng monotonem Verhalten:Sie müssen möglicherweise $lte
verwenden Wenn die Schlüssel nicht streng sind, dann verhindere, Dinge zweimal mit den Dupes zu machen. Da die _id
Feld ist eindeutig, ObjectIds
sind immer strikt monoton.
Wenn Sie keinen solchen Schlüssel haben, ist die Sache etwas kniffliger. Sie können immer noch 'entlang des Index' iterieren (welcher Index auch immer, sei es ein Name, ein Hash, eine UUID, Guid usw.). Das funktioniert genauso gut, aber es ist schwierig, Schnappschüsse zu erstellen, da Sie nie wissen, ob das Ergebnis, das Sie gerade gefunden haben, eingefügt wurde, bevor Sie mit dem Durchlaufen begonnen haben, oder nicht. Auch wenn Dokumente am Anfang des Durchlaufs eingefügt werden, werden diese übersehen.