O
DBCursor
permite-lhe iterar sobre o conjunto de documentos que são considerados relevantes para a query
para passar para o find()
método. Ele busca preguiçosamente esses documentos do banco de dados subjacente em pedaços de batchSize . Portanto, com o tamanho de lote padrão (101, IIRC), ele retornará os primeiros 101 documentos ao seu cliente e, à medida que o código do cliente for iterado além do 101º documento, ele (nos bastidores) pegará os próximos 101 documentos e assim por diante até dos seguintes ocorre primeiro:
- Todos os documentos relevantes para sua consulta são retornados, ou seja, o cursor está esgotado
- Seu cliente para de iterar
O mesmo se aplica quando você define um batchSize explícito então, no seu caso, quando você define
batchSize=500
, o find()
chamada retorna um DBCursor
que contém (no máximo) 500 documentos e, se houver mais de 500 documentos correspondentes à sua consulta, à medida que você iterar além do 500º documento, o driver Java do MongoDB (nos bastidores) buscará o próximo lote. Você afirmou...
... se você obtiver apenas 500 documentos, então você parou de iterar após 500 ou apenas 500 documentos foram considerados relevantes para sua
query
. Você pode ver quantos documentos são relevantes para sua consulta usando o
count()
método. Por exemplo:int count = collection.find(query).count();
Você também pode pegar todos os documentos relevantes para sua consulta de uma só vez sem usar um
DBCursor
assim ... List<DBObject> obj = collection.find(query).toArray();
... embora é claro que isso possa ter implicações para o heap do seu aplicativo, pois resultaria em todos os documentos que atendem aos seus critérios sendo armazenados no heap do seu cliente (em vez da abordagem mais amigável da memória de lê-los em lotes através do
DBCursor
).