Definición
countCuenta el número de documentos en una colección o vista. Devuelve un documento que contiene este recuento, así como el estado del comando.
Tip
En
mongosh, este comando también se puede ejecutar a través delcount()método auxiliar.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.Nota
Los controladores de MongoDB descontinuaron sus respectivas API de cursor y colección
count()(que ejecutan el comando) en favor de las nuevas API correspondientescountacountDocuments()estimatedDocumentCount()y. Para conocer los nombres de API específicos de cada controlador, consulte la documentación de la API del controlador.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Importante
Este comando tiene soporte limitado en los clústeres Flex y M0. Para obtener más información, consulta 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
El comando tiene la siguiente sintaxis:
Nota
MongoDB valida los nombres de las opciones del count comando. El comando genera un error si se especifica un nombre de opción desconocido.
db.runCommand( { count: <collection or view>, query: <document>, limit: <integer>, skip: <integer>, hint: <hint>, readConcern: <document>, maxTimeMS: <integer>, collation: <document>, comment: <any> } )
Campos de comandos
count tiene los siguientes campos:
Campo | Tipo | Descripción | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | El nombre de la colección o vista a contar. | ||||||||||
| Documento | Opcional. Una consulta que selecciona qué documentos contar en la colección o vista. | ||||||||||
| entero | Opcional. El número máximo de documentos coincidentes a devolver. | ||||||||||
| entero | Opcional. El número de documentos coincidentes que se omitirán antes de devolver los resultados. | ||||||||||
| string o documento | Opcional. El índice a utilizar. Especifique el nombre del índice como una cadena o el documento de especificación del índice. | ||||||||||
| Documento | Opcional. Especifica el nivel de consistencia de lectura. La opción debe presentar la siguiente sintaxis: Los posibles niveles de consistencia de lectura son estos:
Para obtener más información sobre los niveles de consistencia de lectura, consulta Nivel de consistencia de lectura. | ||||||||||
| non-negative integer | Opcional. Especifica un límite de tiempo en milisegundos. Si no especifica un valor para MongoDB finaliza las operaciones que exceden su límite de tiempo asignado utilizando el mismo mecanismo que | ||||||||||
| 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. | ||||||||||
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Compatibilidad con Stable API
A partir de MongoDB,6.0 el count comando se incluye en la API estable1 V. Para usar el count comando en la API estable, debe conectar su controlador a una implementación que ejecute MongoDB 6.0 o una versión posterior.
Comportamiento
Conteos inexactos sin predicado de query
Al llamar a sin un predicado de consulta, es posible que reciba count count recuentos de documentos inexactos. Sin un predicado de consulta, los comandos devuelven resultados basados en los metadatos de la colección, lo que puede resultar en 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
Cuando se usa count en una transacción, el recuento resultante no filtrará ninguna transacción multi-documento no comprometida.
Para obtener más detalles, se debe consultar Transacciones y operaciones de recuento.
Precisión y clústeres fragmentados
En un clúster fragmentado, el comando cuando se ejecuta sin count un predicado de consulta puede generar un recuento inexacto si existen documentos huérfanos o si hay una migración de fragmentos en progreso.
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.
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 documento de consulta.
Desconexión del cliente
Si el cliente que emitió count se desconecta antes de que la operación se complete, MongoDB marca count para su terminación usando killOp.
Ejemplos
Las siguientes secciones proporcionan ejemplos del count comando.
Contar todos los documentos
La siguiente operación cuenta el número de todos los documentos en la colección orders:
db.runCommand( { count: 'orders' } )
En el resultado, el n, que representa el recuento, es 26 y el estado del comando ok es 1:
{ "n" : 26, "ok" : 1 }
Contar documentos que coinciden con una consulta
La siguiente operación devuelve un recuento de los documentos en la colección orders donde el valor del campo ord_dt es mayor que Date('01/01/2012'):
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') } } } )
En el resultado, el n, que representa el recuento, es 13 y el estado del comando ok es 1:
{ "n" : 13, "ok" : 1 }
Omitir documentos en el recuento
La siguiente operación devuelve un recuento de los documentos en la colección orders donde el valor del campo ord_dt es mayor que Date('01/01/2012') y omite los primeros 10 documentos coincidentes:
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') } }, skip: 10 } )
En el resultado, el n, que representa el recuento, es 3 y el estado del comando ok es 1:
{ "n" : 3, "ok" : 1 }
Especifique el índice a utilizar
La siguiente operación utiliza el índice { status: 1 } para devolver un recuento de los documentos en la colección orders donde el valor del campo ord_dt es mayor que Date('01/01/2012') y el valor del campo status es igual a "D":
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }, hint: { status: 1 } } )
En el resultado, el n, que representa el recuento, es 1 y el estado del comando ok es 1:
{ "n" : 1, "ok" : 1 }
Anular el nivel de consistencia de lectura por defecto
Para anular el nivel de consistencia de lectura por defecto de "local", usa la opción readConcern.
La siguiente operación en un set de réplicas especifica un nivel de consistencia de lectura de "majority" para leer la copia más reciente de los datos confirmados como están escritos en la mayoría de los nodos.
Importante
Para utilizar el nivel
readConcernde"majority", debe especificar una condiciónqueryno vacía.Independientemente del nivel de consistencia de lectura, es posible que los datos más recientes de un nodo no reflejen la versión más reciente de los datos en el sistema.
db.runCommand( { count: "restaurants", query: { rating: { $gte: 4 } }, readConcern: { level: "majority" } } )
Para asegurarte de que un solo hilo pueda leer sus propias escrituras, utiliza el nivel de consistencia de lectura "majority" y el nivel de confirmación de escritura "majority" contra el primario del set de réplicas.