$count (agregação)
Definição
$count
Passa um documento para a próxima etapa que contém uma contagem do número de documentos inseridos na etapa.
Observação
Desambiguação
Esta página descreve a fase do pipeline de agregação
$count
. Para o acumulador de agregação$count
, consulte$count (aggregation accumulator)
.
Compatibilidade
Você pode utilizar o $count
para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
$count
tem a seguinte sintaxe:
{ $count: <string> }
<string>
é o nome do campo de saída que tem a contagem como seu valor. <string>
deve ser uma string não vazia, não deve começar com $
e não deve conter o caractere .
.
Comportamento
O estágio é $count
$group
$project
equivalente à seguinte sequência e:
db.collection.aggregate( [ { $group: { _id: null, myCount: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
myCount
é o campo de saída que armazena a contagem. Você pode especificar outro nome para o campo de saída.
Se o conjunto de dados de entrada estiver vazio, $count
não retornará um resultado.
Dica
Veja também:
db.collection.countDocuments()
que envolve o estágio de agregação $group
com uma expressão $sum
.
Exemplos
Crie uma collection chamada scores
com estes documentos:
db.scores.insertMany( [ { "_id" : 1, "subject" : "History", "score" : 88 }, { "_id" : 2, "subject" : "History", "score" : 92 }, { "_id" : 3, "subject" : "History", "score" : 97 }, { "_id" : 4, "subject" : "History", "score" : 71 }, { "_id" : 5, "subject" : "History", "score" : 79 }, { "_id" : 6, "subject" : "History", "score" : 83 } ] )
A seguinte operação de agregação tem duas etapas:
O estágio
$match
exclui documentos que têm um valorscore
menor ou igual a80
para passar os documentos comscore
maior que80
para o próximo estágio.O estágio
$count
retorna uma contagem dos documentos restantes no pipeline de agregação e atribui o valor a um campo chamadopassing_scores
.
db.scores.aggregate( [ { $match: { score: { $gt: 80 } } }, { $count: "passing_scores" } ] )
A operação retorna este resultado:
{ "passing_scores" : 4 }
Se o conjunto de dados de entrada estiver vazio, $count
não retornará um resultado. O exemplo a seguir não retorna um resultado porque não há documentos com pontuações superiores a 99
:
db.scores.aggregate( [ { $match: { score: { $gt: 99 } } }, { $count: "high_scores" } ] )