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

Mongo mit Java - Suchabfrage mit Batchgröße

Der DBCursor ermöglicht es Ihnen, über den Satz von Dokumenten zu iterieren, die für die query als relevant erachtet werden an find() übergeben werden Methode. Es ruft diese Dokumente faul aus der zugrunde liegenden Datenbank in Blöcken von batchSize ab .

Mit der Standardstapelgröße (101, IIRC) werden also die ersten 101-Dokumente an Ihren Client zurückgegeben, und wenn Ihr Client-Code über das 101. Dokument hinaus iteriert, werden (hinter den Kulissen) die nächsten 101-Dokumente abgerufen und so weiter, bis welche Folgendes tritt zuerst auf:

  • Alle für Ihre Anfrage relevanten Dokumente werden zurückgegeben, d.h. der Cursor ist erschöpft
  • Ihr Client beendet die Iteration

Dasselbe gilt, wenn Sie eine explizite batchSize setzen also in Ihrem Fall, wenn Sie batchSize=500 setzen , das find() Aufruf gibt einen DBCursor zurück die (höchstens) 500 Dokumente enthält, und wenn mehr als 500 Dokumente mit Ihrer Abfrage übereinstimmen, würde der MongoDB-Java-Treiber (hinter den Kulissen) den nächsten Stapel abrufen, wenn Sie über das 500. Dokument hinausgehen.

Sie haben angegeben ...

... wenn Sie nur 500 Dokumente erhalten, dann haben Sie entweder nach 500 mit der Iteration aufgehört oder nur 500 Dokumente wurden für Ihre query als relevant erachtet .

Sie können sehen, wie viele Dokumente für Ihre Anfrage relevant sind, indem Sie count() verwenden Methode. Zum Beispiel:

int count = collection.find(query).count();

Sie können auch alle für Ihre Anfrage relevanten Dokumente auf einen Schlag abrufen ohne einen DBCursor zu verwenden so ...

List<DBObject> obj = collection.find(query).toArray();

... obwohl dies natürlich Auswirkungen auf den Heap Ihrer Anwendung haben könnte, da es dazu führen würde, dass jedes Dokument, das Ihren Kriterien entspricht, auf dem Heap in Ihrem Client gespeichert wird (anstatt des speicherfreundlicheren Ansatzes, sie stapelweise über den DBCursor ).