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.
Executar operações nos dados agrupados para gerar um único resultado.
Analisar alterações de dados ao longo do tempo.
Consulte a versão mais atualizada dos seus dados.
Ao usar os operadores de agregação integrados no MongoDB, você pode realizar análises em seu cluster sem precisar mover seus dados para outra plataforma.
Começar
Para realizar operações de agregação, você pode usar:
Pipelines de agregação, considerado o método principal para realizar agregações.
Métodos de agregação de finalidade específica, considerados simples, mas não possuem os mesmos recursos de 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.
Este pipeline encontra os três principais diretores que direcionaram a maioria dos filmes no banco de dados.
Primeiro, adicione um estágio para filtrar os documentos para filmes que tenham diretores listados (excluindo documentos onde o campo de diretores está 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 possamos contar filmes por diretor individual :
{ $unwind : "$directors" },
Em seguida, os documentos por nome do diretor e conte o número de filmes que cada diretor$group fez:
{ $group : { _id : "$directors", movieCount : { $sum: 1 } } },
Para encontrar os diretores com mais filmes, use o estágio para classificar os documentos restantes em ordem decrescente por contagem de $sort filmes:
{ $sort : { movieCount : -1 } },
Depois de classificar seus documentos, use o estágio para retornar os três diretores que direcionaram mais $limit filmes:
{ $limit : 3 }
O pipeline completo é fornecido neste exemplo:
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 } ] )
Esse pipeline retorna esses 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.
Saiba mais sobre pipelines 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
Os métodos de agregação de finalidade específica agregam documentos a partir de uma única coleção. Os métodos são simples, mas não possuem os mesmos recursos de 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. |