Definición
db.collection.count(query, options)Importante
Método mongosh
Esta página documenta un método
mongosh. Esta no es la documentación para los comandos de base de datos ni para los drivers específicos de lenguajes, como Nodo.js.Para el comando de base de datos, consulte el
countdominio.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
Nota
Los controladores de MongoDB desaprueban sus respectivas API de cursor y colección
count()en favor de nuevas API paracountDocuments()yestimatedDocumentCount(). Para los nombres específicos de API de un controlador dado, consulte la documentación del controlador.Devuelve el recuento de documentos que coincidirían con una
find()query para la colección o vista. El métododb.collection.count()no realiza la operaciónfind(), sino que cuenta y devuelve el número de resultados que coinciden con una query.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado 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 el soporte de Atlas para 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.
Sintaxis
Este método toma los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Documento | Los criterios de selección de la query. |
| Documento | Opcional. Opciones extra para modificar el recuento. |
El documento options contiene los siguientes campos:
Campo | Tipo | Descripción | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| entero | Opcional. El número máximo de documentos que se deben contar. | ||||||||||
| entero | Opcional. El número de documentos que se deben omitir antes de contar. | ||||||||||
| string o documento | Opcional. Una sugerencia o especificación del nombre del índice para la query. | ||||||||||
| entero | Opcional. La cantidad máxima de tiempo para permitir ejecutar la query. | ||||||||||
| string | Opcional. Especifica el nivel de consistencia de lectura. El nivel por defecto es Para asegurarte de que un solo hilo pueda leer sus propias escrituras, utiliza el nivel de consistencia de lectura Para utilizar un nivel de consistencia de lectura de | ||||||||||
| Documento | Opcional. Especifica la intercalación a utilizar para la operación. La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento. La opción de intercalación tiene la siguiente sintaxis: Al especificar la intercalación, el campo Si no se especifica la intercalación, pero la colección tiene una intercalación por defecto (ver Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings. No puedes especificar varias intercalaciones para una operación. Por ejemplo, no puedes especificar diferentes intercalaciones por campo, o si realizas una búsqueda con un ordenamiento, no puedes usar una intercalación para la búsqueda y otra para el ordenamiento. |
count() es equivalente a la construcción db.collection.find(query).count().
Comportamiento
Conteos inexactos sin predicado de query
Cuando se invoca a count() sin un predicado de query, pueden recibirse recuentos de documentos inexactos. Sin un predicado de query, los métodos de count() devuelven resultados basados en los metadatos de la colección, lo que puede resultar en un conteo 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 puede usar count y asistentes 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 particionado, db.collection.count() sin un predicado de query puede resultar en un recuento inexacto si existen documentos huérfanos o si una migración de fragmentos está en curso.
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.
Precisión tras un apagado inesperado
Después de un cierre no limpio de un mongod que utiliza el motor de almacenamiento WiredTiger, las estadísticas de conteo informadas por count() pueden ser inexactas.
La cantidad de deriva depende del número de operaciones de inserción, actualización o eliminación realizadas entre el último punto de control y el apagado no limpio. Los puntos de control suelen ocurrir cada 60 segundos. Sin embargo, las instancias mongod que se ejecutan con configuraciones --syncdelay no por defecto pueden tener puntos de control más o menos frecuentes.
Ejecuta validate en cada colección en el mongod para restaurar las estadísticas después de un apagado no limpio.
Después de un apagado no limpio:
validateactualiza la estadística de recuento en la salidacollStatscon el último valor.Otras estadísticas como el número de documentos insertados o eliminados en la salida
collStatsson estimaciones.
Nota
Esta pérdida de precisión solo se aplica a count() operaciones que no incluyen un predicado de query.
Desconexión del cliente
Si el cliente que emitió db.collection.count() se desconecta antes de que la operación se complete, MongoDB marca db.collection.count() para su terminación usando killOp.
Ejemplos
Cuenta todos los documentos en una colección
Para contar el número de todos los documentos en la colección orders, utiliza la siguiente operación:
db.orders.count()
Esta operación es equivalente a la siguiente:
db.orders.find().count()
Conteo de todos los documentos que coinciden con una query
Cuenta el número de documentos en la colección orders cuyo campo ord_dt sea mayor que new
Date('01/01/2012'):
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
La query es equivalente a lo siguiente:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()