Definición
cursor.count()Importante
Método mongosh
Esta página documenta un método
mongosh. No se trata de la documentación de un controlador específico de un lenguaje, como Node.js.Para obtener información sobre los controladores de la API de MongoDB, consulte la documentación del controlador de MongoDB específica del lenguaje.
Nota
Los controladores de MongoDB desaprueban sus respectivas
count()API de cursor y de colección en favor de las nuevas API que corresponden acountDocuments()yestimatedDocumentCount(). Para conocer los nombres específicos de la API para un controlador dado, consulte la documentación de la API del controlador.Cuenta el número de documentos a los que hace referencia un cursor. Añade el método
count()a una consultafind()para obtener el número de documentos coincidentes. Esta operación no ejecuta la consulta, sino que cuenta los resultados que esta devolvería.El método
count()tiene la siguiente forma de prototipo:db.collection.find(<query>).count() El método
count()tiene el siguiente parámetro:ParameterTipoDescripciónapplySkipLimitbooleano
Opcional.
mongoshignora cualquier valor que establezca para esta opción. El valor predeterminado estrue.Esta opción especifica si se deben considerar los efectos de los métodos
cursor.skip()ycursor.limit()en el recuento. Por defecto, el métodocount()ignora los efectos de los métodoscursor.skip()ycursor.limit(). Debe establecerapplySkipLimitentruepara considerar el efecto de estos métodos.El shell
mongoheredado, que ahora está obsoleto, usaba tu configuración para esta opción.MongoDB también proporciona un equivalente
db.collection.count()como alternativa a la construccióndb.collection.find(<query>).count().MongoDB admite el uso de
hint()concount(). Consulte Especificar el índice a utilizar para ver un ejemplo.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente administrado para implementaciones de MongoDB en la nube.
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre la compatibilidad de Atlas con todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
Conteos inexactos sin predicado de query
Cuando se llama a count() en una operación find() que no especifica un predicado de consulta, el método count() puede devolver recuentos de documentos inexactos. Estos métodos count() devuelven resultados basados en los metadatos de la colección, lo que puede dar como resultado un recuento aproximado. En particular,
En un clúster, el recuento resultante no filtrará correctamente los documentos huérfanos.
Después de un apagado no limpio o una sincronización inicial basada en copia de archivo, el recuento puede ser incorrecto.
Para los recuentos basados en los metadatos de la colección, consulta también la etapa de la pipeline de collStats con la opción count.
Conteo y transacciones
No puedes usar count y los ayudantes de shell count() y db.collection.count() en transacciones.
Para obtener más detalles, se debe consultar Transacciones y operaciones de recuento.
Clústeres fragmentados
En un clúster fragmentado, count() sin un predicado de consulta en find puede resultar en un recuento inexacto si existen documentos huérfanos o si se está realizando una migración de fragmentos.
Para evitar estas situaciones, en un clúster fragmentado, usa el método db.collection.aggregate():
Puedes utilizar la etapa $count para contar los documentos. Por ejemplo, la siguiente operación cuenta los documentos en una colección:
db.collection.aggregate( [ { $count: "myCount" } ])
La etapa $count es equivalente a la siguiente secuencia de $group + $project:
db.collection.aggregate( [ { $group: { _id: null, count: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
Tip
$collStats para devolver un conteo aproximado basado en los metadatos de la colección.
Uso del índice
Considera una colección con el siguiente índice:
{ a: 1, b: 1 }
Al realizar un recuento, MongoDB puede devolver el recuento utilizando solo el índice si:
La query puede usar un índice,
la query solo contiene condiciones sobre las claves del índice, y
los predicados de query acceden a un único rango contiguo de claves de índice.
Por ejemplo, las siguientes operaciones pueden devolver el conteo usando solo el índice:
db.collection.find( { a: 5, b: 5 } ).count() db.collection.find( { a: { $gt: 5 } } ).count() db.collection.find( { a: 5, b: { $gt: 10 } } ).count()
Sin embargo, si la query puede utilizar un índice pero los predicados de la query no acceden a un solo rango contiguo de claves de índice o la query también contiene condiciones en campos fuera del índice, entonces, además de utilizar el índice, MongoDB también debe leer los documentos para devolver el recuento.
db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count() db.collection.find( { a: { $gt: 5 }, b: 5 } ).count() db.collection.find( { a: 5, b: 5, c: 5 } ).count()
En tales casos, durante la lectura inicial de los documentos, MongoDB carga los documentos en memoria de manera que las llamadas posteriores a la misma operación de conteo tengan un mejor rendimiento.
Ejemplos
Los siguientes son ejemplos del método count().
Contar todos los documentos
La siguiente operación cuenta el número de todos los documentos en la colección orders:
db.orders.find().count()
Contar documentos que coinciden con una query
La siguiente operación cuenta el número de documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012'):
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()
Limitar documentos en cantidad
La siguiente operación cuenta el número de documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012') teniendo en cuenta el efecto de limit(5):
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)
Especificar el índice a utilizar
La siguiente operación utiliza el índice llamado "status_1", que tiene la especificación de clave de índice { status: 1 }, para devolver un recuento de los documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012') y el campo status igual a "D":
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" } ).hint( "status_1" ).count()