MongoDB ofrece varios métodos para contar los documentos en una colección o vista. También hay algunos operadores de agregación que le permiten contar los documentos entrantes de una etapa anterior de canalización de agregación.
Este artículo presenta las siguientes formas de contar documentos en el shell mongo:
- El
count
comando - El
db.collection.count()
método - El
db.collection.countDocuments()
método - El
db.collection.estimatedDocumentCount()
método - El
cursor.count()
método - El
$count
operador de tubería de agregación - El
$sortByCount
operador de tubería de agregación
El count
Comando
El count
El comando cuenta el número de documentos en una colección o una vista.
Ejemplo:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Resultado:
{ "n" : 4, "ok" : 1 }
En este ejemplo, podemos ver que hay cuatro perros en las pets
colección.
También podemos ver que devuelve un documento que contiene el recuento y el estado del comando.
El db.collection.count()
Método
El db.collection.count()
El método devuelve el recuento de documentos que coincidirían con un find()
consulta de la colección o vista.
La collection
part es el nombre de la colección o vista para realizar la operación de conteo.
El db.collection.count()
method es un método contenedor para el count
comando.
Ejemplo:
db.pets.count({
"type": "Dog"
})
Resultado:
4
El db.collection.count()
el método no devuelve un documento como el count
el comando lo hace. Simplemente devuelve el conteo.
El countDocuments()
Método
db.collection.countDocuments()
El método devuelve el recuento de documentos que coinciden con la consulta de una colección o vista.
La collection
part es el nombre de la colección o vista para realizar la operación de conteo.
Ejemplo:
db.pets.countDocuments({
"type": "Dog"
})
Resultado:
4
Básicamente el mismo resultado que db.collection.count()
, aunque se recomienda usar countDocuments()
en lugar de count()
si es posible.
La documentación de MongoDB dice:
Los controladores MongoDB compatibles con las funciones 4.0 desaprueban sus respectivos cursores y colecciones
count()
API a favor de nuevas API paracountDocuments()
yestimatedDocumentCount()
. Para conocer los nombres de API específicos para un controlador determinado, consulte la documentación del controlador.
Además, cuando se usa sin un predicado de consulta, count()
se basa en metadatos, lo que puede dar como resultado un recuento aproximado. El countDocuments()
Por otro lado, el método no se basa en metadatos y devuelve un recuento preciso al realizar una agregación de los documentos.
El estimatedDocumentCount()
Método
db.collection.estimatedDocumentCount()
El método es un envoltorio para el count
comando que devuelve el recuento de todos los documentos en una colección o vista.
Ejemplo:
db.pets.estimatedDocumentCount()
Resultado:
7
db.collection.estimatedDocumentCount()
El método no acepta un filtro de consulta. En su lugar, utiliza metadatos para devolver el recuento de documentos de toda la colección/vista.
El cursor.count()
Método
El cursor.count()
El método es un envoltorio para el count
comando que cuenta el número de documentos referenciados por un cursor..
En realidad, no realiza la consulta. Simplemente cuenta y devuelve el número de resultados que devolvería la consulta.
Ejemplo:
db.pets.find({"type": "Dog"}).count()
Resultado:
4
Esto es equivalente a db.collection.count()
ejemplo de método anterior.
Como se mencionó anteriormente, los controladores MongoDB compatibles con las funciones 4.0 desaprueban sus respectivos cursores y colecciones count()
API a favor de nuevas API para countDocuments()
y estimatedDocumentCount()
.
El $count
Operador de tubería de agregación
El $count
el operador de agregación pasa un documento a la siguiente etapa en la canalización de agregación que contiene un recuento del número de documentos ingresados a la etapa actual.
Ejemplo:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Resultado:
{ "DogCount" : 4 }
Aquí hay otro ejemplo que muestra cómo puede usar este operador para contar resultados agrupados.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Resultado:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Esta consulta en particular se puede hacer con menos código usando $sortByCount
operador de canalización de agregación (abajo).
El $sortByCount
Operador de tubería de agregación
El $sortByCount
El operador de agregación agrupa los documentos entrantes según el valor de una expresión específica, luego calcula el recuento de documentos en cada grupo distinto.
Así es como podemos usar $sortByCount
para lograr el mismo resultado que el ejemplo anterior:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Resultado:
{ "_id" : "Dog", "count" : 3 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bat", "count" : 1 }
Cada grupo se genera en su propio documento, que consta de dos campos:
- un
_id
campo que contiene el valor de agrupación diferenciado, y - un
count
campo que contiene el número de documentos pertenecientes a esa agrupación.
Los documentos están ordenados por count
en orden descendente.