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
O exemplo de pipeline a seguir usa documentos dos dados de amostra disponíveis no MongoDB Atlas, especificamente a collection sample_training.routes
. Neste pipeline, encontraremos as três principais companhias aéreas que oferecem a maior parte devoos diretos do aeroporto de Oregon, EUA (PDX).
Primeiro, adicione um estágio $match
para filtrar os documentos para períodos que têm um valor src_airport
de PDX
e zero stops
:
{ $match : { "src_airport" : "PDX", "stops" : 0 } }
O estágio $match
reduz o número de documentos em nosso pipeline de 66,985 para 113. Em seguida, $group
os documentos por nome da companhia aérea e conte o número de voos:
{ $group : { _id : { "airline name": "$airline.name", } count : { $sum : 1 } } }
O estágio $group
reduz o número de documentos no pipeline para 16 companhias aéreas. Para encontrar as companhias aéreas com a maior parte dos voos, use o estágio $sort
para classificar os documentos restantes em ordem decrescente:
{ $sort : { count : -1 } }
Depois de classificar seus documentos, use o estágio $limit
para retornar as três principais companhias aéreas que oferecem a maioria dos voos diretos para fora do PDX:
{ $limit : 3 }
Depois de inserir os documentos na coleção sample_training.routes
por meio desse pipeline de agregação , as três principais companhias aéreas que oferecemvoos sem escalas de PDX são a Alasca, a American e a Estados Unidos, comvoos 39, 17 e 13, respectivamente .
O pipeline completo se assemelha ao seguinte:
db.routes.aggregate( [ { $match : { "src_airport" : "PDX", "stops" : 0 } }, { $group : { _id : { "airline name": "$airline.name", } count : { $sum: 1 } } }, { $sort : { count : -1 } }, { $limit : 3 } ] )
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. |