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 tipo de retorno é representado pelo menor tipo que pode armazenar o valor final da contagem: integer
→ long
→ double
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
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" } ] )
Os exemplos de C# nesta página utilizam o banco de dados sample_mflix
a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver MongoDB .NET/C#.
A seguinte classe Movie
modela os documentos na collection sample_mflix.movies
:
public class Movie { public ObjectId Id { get; set; } public int Runtime { get; set; } public string Title { get; set; } public string Rated { get; set; } public List<string> Genres { get; set; } public string Plot { get; set; } public ImdbData Imdb { get; set; } public int Year { get; set; } public int Index { get; set; } public string[] Comments { get; set; } [ ] public DateTime LastUpdated { get; set; } }
Observação
Pacote de Convenções para Caso Pascal
As classes C# nesta página usam maiúsculas e minúsculas Pascal para seus nomes de propriedade , mas os nomes de campo na coleção MongoDB usam camel case. Para contabilizar esta diferença, você pode utilizar o seguinte código para registrar um ConventionPack
quando seu aplicação iniciar:
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
Para usar o driver MongoDB .NET/C# para adicionar um estágio $count
a um pipeline de agregação, chame o método Count() em um objeto PipelineDefinition
.
O exemplo a seguir cria um estágio de pipeline que conta o número de documentos de entrada e retorna um documento com a contagem como seu valor:
var pipeline = new EmptyPipelineDefinition<Movie>() .Count();