MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:kann keinen Cursor verwenden, um alle Daten zu durchlaufen

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.