MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Operador de agregação do MongoDB $count


No MongoDB o $count O operador de agregação passa um documento para o próximo estágio no pipeline de agregação que contém uma contagem do número de documentos inseridos no estágio atual.

Exemplo


Suponha que tenhamos uma coleção chamada pets com os seguintes 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 a seguinte operação de agregação para contar o número de cães na coleção:
db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
])

Resultado:
{ "DogCount" : 4 }

A maneira como o pipeline de agregação funciona é que ele consiste em estágios. Cada estágio do pipeline fornece a entrada para o próximo estágio.

Portanto, no exemplo acima, o primeiro estágio filtrava a coleção apenas para aqueles documentos que tinham um type de dog . A segunda etapa pegou esses documentos, contou-os e passou o resultado para a próxima etapa. Dado que era o último estágio do pipeline, vimos a saída.

Contando documentos agrupados


Aqui está um exemplo que combina o operador agregado $group com $count para retornar uma contagem de cada tipo de animal de estimação com um determinado peso.
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 }

Adicionar um estágio de pipeline


Neste exemplo, adicionamos um estágio de pipeline para classificar os resultados. Em particular, usamos o $sort operador para fazer isso.
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 }

Nesse caso, classificamos pela contagem em ordem decrescente (o -1 especifica ordem decrescente), então por _id em ordem crescente (o 1 especifica a ordem crescente).

Mais informações


Consulte a documentação do MongoDB para obter mais informações.