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