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

Operador de agregación MongoDB $count

En MongoDB 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

Supongamos que tenemos una colección llamada pets con los siguientes documentos:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

Podemos usar la siguiente operación de agregación para contar el número de perros en la colección:

db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
])

Resultado:

{ "DogCount" : 4 }

La forma en que funciona la canalización de agregación consiste en etapas. Cada etapa de canalización proporciona la entrada para la siguiente etapa.

Por lo tanto, en el ejemplo anterior, la primera etapa filtró la colección solo a aquellos documentos que tenían un type de dog . La segunda etapa tomó esos documentos, los contó y pasó el resultado a la siguiente etapa. Dado que era la última etapa del proceso, vimos el resultado.

Contar documentos agrupados

Aquí hay un ejemplo que combina el operador agregado $group con $count para devolver un recuento de cada tipo de mascota por debajo de un peso determinado.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    }
])

Resultado:

{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
{ "_id" : "Dog", "count" : 3 }

Agregar una etapa de canalización

En este ejemplo, agregamos una etapa de canalización para ordenar los resultados. En particular, usamos el $sort operador para hacer esto.

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 }

En este caso, ordenamos por el conteo en orden descendente (el -1 especifica el orden descendente), luego por _id en orden ascendente (el 1 especifica el orden ascendente).

Más información

Consulte la documentación de MongoDB para obtener más información.