Operações de agregação processam diversos documentos e geram resultados calculados. Você pode usar operações de agregação para:
Agrupar valores de diversos documentos.
Calcule um único resultado a partir dos dados agrupados.
Analisar alterações de dados ao longo do tempo.
Consulte a versão mais atualizada dos seus dados.
Os operadores de agregação no MongoDB permitem que você execute análises em seu cluster sem mover dados para outra plataforma.
Começar
Para realizar operações de agregação, você pode usar:
Aggregation pipelines, o método preferido.
Métodos de agregação de finalidade única, que têm menos funcionalidade do que um pipeline de agregação .
Você pode executar pipelines de agregação na IU para sistemas hospedados no MongoDB Atlas.
Aggregation Pipelines
Um pipeline de agregação consiste em um ou mais estágios que processam documentos. Esses documentos podem vir de uma collection, uma visualização ou um estágio especialmente projetado.
Cada estágio executa uma operação nos documentos de entrada. Por exemplo, um estágio pode $filter documentos, $group documentos e calcular valores. Os documentos gerados de um estágio são então passados para o próximo estágio no pipeline.
Um pipeline de agregação pode retornar resultados para grupos de documentos. Você também pode atualizar documentos com um pipeline de agregação usando os estágios mostrados em Atualizações com Pipeline de Agregação.
Observação
Os pipelines de agregação executados com o método db.collection.aggregate() não modificam documentos em uma coleção, a menos que o pipeline contenha um estágio $merge ou $out.
Exemplo de pipeline de agregação
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
O pipeline a seguir encontra os três diretores que mais direcionaram filmes no banco de dados.
Use um estágio para filtrar filmes que tenham diretores listados (excluindo documentos em que o campo de diretores é nulo ou $match vazio):
{ $match : { "directors" : { $exists: true, $ne: null, $not: {$size: 0} } } },
O $match estágio reduz o número de documentos em nosso pipeline ao filtrar filmes sem informações do diretor . Em seguida, use $unwind para desconstruir a array de diretores para que você possa contar filmes por diretor individual :
{ $unwind : "$directors" },
Use para agrupar documentos por nome do diretor e contar os filmes de cada $group diretor:
{ $group : { _id : "$directors", movieCount : { $sum: 1 } } },
Use para ordenar os documentos restantes em ordem decrescente por contagem de $sort filmes:
{ $sort : { movieCount : -1 } },
Use para retornar os três principais $limit diretores:
{ $limit : 3 }
O pipeline completo:
db.movies.aggregate( [ { $match : { "directors" : { $exists: true, $ne: null, $not: {$size: 0} } } }, { $unwind : "$directors" }, { $group : { _id : "$directors", movieCount : { $sum: 1 } } }, { $sort : { movieCount : -1 } }, { $limit : 3 } ] )
O pipeline retorna estes resultados:
[ { _id: 'Woody Allen', movieCount: 40 }, { _id: 'Martin Scorsese', movieCount: 32 }, { _id: 'Takashi Miike', movieCount: 31 } ]
Para exemplos executáveis que contêm exemplos de documentos de input, consulte Exemplos completos de pipeline de agregação.
Para saber mais sobre pipelines de agregação, consulte Pipelines de agregação.
Métodos de agregação de finalidade específica
Métodos de agregação de finalidade única agregam documentos a partir de uma única collection. Esses métodos têm menos funcionalidade do que um pipeline de agregação .
Método | Descrição |
|---|---|
Gera uma contagem aproximada dos documentos em uma coleção ou visualização. | |
Gera uma contagem do número de documentos em uma coleção ou visualização. | |
Gera uma array de documentos com valores distintos para o campo especificado. |