Le DBCursor
vous permet d'itérer sur l'ensemble des documents jugés pertinents pour la query
à passer dans le find()
méthode. Il récupère paresseusement ces documents à partir de la base de données sous-jacente en morceaux de batchSize .
Ainsi, avec la taille de lot par défaut (101, IIRC), il renverra les 101 premiers documents à votre client, puis au fur et à mesure que votre code client itérera au-delà du 101e document, il saisira (en coulisses) les 101 documents suivants et ainsi de suite jusqu'à ce que l'un des événements suivants se produit en premier :
- Tous les documents pertinents pour votre requête sont renvoyés, c'est-à-dire que le curseur est épuisé
- Votre client arrête d'itérer
La même chose s'applique lorsque vous définissez un batchSize explicite donc dans votre cas lorsque vous définissez batchSize=500
, le find()
call renvoie un DBCursor
qui contient (au plus) 500 documents et s'il y avait plus de 500 documents correspondant à votre requête, alors que vous itérez au-delà du 500e document, le pilote Java MongoDB récupèrerait (en coulisses) le lot suivant.
Vous avez déclaré ...
... si vous n'obtenez que 500 documents, soit vous avez arrêté l'itération après 500, soit seuls 500 documents ont été jugés pertinents pour votre query
.
Vous pouvez voir combien de documents sont pertinents pour votre requête en utilisant le count()
méthode. Par exemple :
int count = collection.find(query).count();
Vous pouvez également saisir tous les documents pertinents pour votre requête en une seule fois sans utiliser un DBCursor
comme ça...
List<DBObject> obj = collection.find(query).toArray();
... bien que cela puisse bien sûr avoir des implications pour le tas de votre application car cela entraînerait le stockage de chaque document répondant à vos critères sur le tas dans votre client (plutôt que l'approche plus conviviale en mémoire consistant à les lire par lots via le DBCursor
).