sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo med java - hitta sökfråga med batchstorlek

DBCursor låter dig iterera över den uppsättning dokument som anses relevanta för frågan för att skickas till find() metod. Den hämtar lätt dessa dokument från den underliggande databasen i bitar av batchSize .

Så, med standardbatchstorleken (101, IIRC) kommer den att returnera de första 101 dokumenten till din klient och sedan när din klientkod itererar bortom det 101:a dokumentet kommer den (bakom kulisserna) att ta tag i de nästa 101 dokumenten och så vidare tills vilken som helst av följande inträffar först:

  • Alla dokument som är relevanta för din fråga returneras, dvs. markören är slut
  • Din klient slutar att iterera

Detsamma gäller när du ställer in en explicit batchSize så i ditt fall när du ställer in batchSize=500 , find() anrop returnerar en DBCursor som innehåller (högst) 500 dokument och om det fanns fler än 500 dokument som matchade din fråga, så skulle MongoDB Java-drivrutinen (bakom kulisserna) hämta nästa batch när du upprepar det 500:e dokumentet.

Du sa ...

... om du bara får 500 dokument så slutade du antingen upprepa efter 500 eller så ansågs bara 500 dokument vara relevanta för din fråga .

Du kan se hur många dokument som är relevanta för din fråga genom att använda count() metod. Till exempel:

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

Du kan också hämta alla dokument som är relevanta för din fråga på en gång utan att använda en DBCursor så här ...

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

... även om detta naturligtvis kan ha konsekvenser för din applikations hög eftersom det skulle resultera i att alla dokument som uppfyller dina kriterier lagras på högen i din klient (snarare än det mer minnesvänliga tillvägagångssättet att läsa dem i omgångar via DBCursor ).



  1. MongoDB java-drivrutin:filtrera efter id

  2. Upserting i Mongo DB och Id-problemet

  3. Hur bygger man en villkorlig fråga i Mongoose?

  4. MongoDBs växande betydelse inom datavetenskapsområdet