sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo con java:consulta de búsqueda con tamaño de lote

El DBCursor le permite iterar sobre el conjunto de documentos que se consideran relevantes para la query para pasar a find() método. Obtiene perezosamente estos documentos de la base de datos subyacente en fragmentos de batchSize .

Entonces, con el tamaño de lote predeterminado (101, IIRC), devolverá los primeros 101 documentos a su cliente y luego, a medida que su código de cliente itera más allá del documento 101, tomará (entre bastidores) los siguientes 101 documentos y así sucesivamente hasta que de lo siguiente ocurre primero:

  • Se devuelven todos los documentos que son relevantes para su consulta, es decir, el cursor está agotado
  • Tu cliente deja de iterar

Lo mismo se aplica cuando establece un batchSize explícito entonces en su caso cuando configura batchSize=500 , el find() la llamada devuelve un DBCursor que contiene (como máximo) 500 documentos y si hubiera más de 500 documentos que coincidieran con su consulta, a medida que itera más allá del documento 500, el controlador MongoDB Java buscaría (entre bastidores) el siguiente lote.

Tú dijiste...

... si solo obtiene 500 documentos, entonces dejó de iterar después de 500 o solo 500 documentos se consideraron relevantes para su query .

Puede ver cuántos documentos son relevantes para su consulta utilizando count() método. Por ejemplo:

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

También puede tomar todos los documentos relevantes para su consulta de una sola vez sin usar un DBCursor así...

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

... aunque, por supuesto, esto podría tener implicaciones para el montón de su aplicación, ya que daría como resultado que todos los documentos que cumplan con sus criterios se almacenen en el montón en su cliente (en lugar del enfoque más amigable con la memoria de leerlos en lotes a través del DBCursor ).