De DBCursor
stelt u in staat om de reeks documenten te herhalen die relevant worden geacht voor de query
om door te geven aan de find()
methode. Het haalt deze documenten lui uit de onderliggende database in brokken van batchSize .
Dus met de standaard batchgrootte (101, IIRC) zal het de eerste 101 documenten terugsturen naar uw klant en vervolgens, terwijl uw klantcode verder gaat dan het 101e document, zal het (achter de schermen) de volgende 101 documenten pakken enzovoort tot welke van het volgende komt het eerst voor:
- Alle documenten die relevant zijn voor uw zoekopdracht worden geretourneerd, d.w.z. de cursor is leeg
- Uw klant stopt met herhalen
Hetzelfde geldt wanneer u een expliciete batchSize instelt dus in jouw geval wanneer je batchSize=500
. instelt , de find()
oproep retourneert een DBCursor
die (maximaal) 500 documenten bevat en als er meer dan 500 documenten zijn die overeenkomen met uw zoekopdracht, dan zal de MongoDB Java-driver (achter de schermen) de volgende batch ophalen als u verder gaat dan het 500e document.
U verklaarde ...
... als u slechts 500 documenten krijgt, stopte u met herhalen na 500 of werden slechts 500 documenten relevant geacht voor uw query
.
U kunt zien hoeveel documenten relevant zijn voor uw zoekopdracht door de count()
. te gebruiken methode. Bijvoorbeeld:
int count = collection.find(query).count();
U kunt ook alle documenten die relevant zijn voor uw vraag in één keer . pakken zonder een DBCursor
. te gebruiken zoals dit ...
List<DBObject> obj = collection.find(query).toArray();
... hoewel dit natuurlijk gevolgen kan hebben voor de heap van uw toepassing, aangezien dit ertoe zou leiden dat elk document dat aan uw criteria voldoet, op de heap wordt opgeslagen in uw client (in plaats van de meer geheugenvriendelijke benadering om ze in batches te lezen via de DBCursor
).