A operação de agregação no MongoDB é uma maneira eficaz de processar dados e retornar resultados computados. As operações de agregação agrupam valores de várias documentos e podem executar uma variedade de operações nesses dados agrupados para retornar um único resultado. O MongoDB fornece três maneiras de executar agregações: a pipeline de agregação, o método map-reduce e operações de agregação de único propósito.
Pipeline de Agregação
As pipelines de agregação no MongoDB usam operadores de pipeline para processar e transformar seus documentos em estágios agrupados. Cada documento passa por esses estágios de pipeline em ordem. A pipeline de agregação é uma estrutura poderosa que fornece capacidades semelhantes às consultas SQL GROUP BY.
Os operadores de pipeline incluem $match, $group, $sort, $project, $limit e muitos outros. $match filtra documentos, $group agrupa valores de vários documentos juntos, $sort ordena os documentos, $project remodela cada documento, $limit limita o número de documentos a passar para a próxima etapa.
Operações Map-Reduce
O método map-reduce é uma maneira flexível de executar agregações, especialmente quando lidamos com grandes volumes de dados. O Map-Reduce é um modelo de processamento de dados para condensar grandes volumes de dados em resultados úteis agregados. No MongoDB, map-reduce opera em uma coleção de documentos e retorna um resultado de coleção.
O processo map-reduce no MongoDB primeiro mapeia os dados para emitir pares chave-valor e, em seguida, reduz todos os pares com a mesma chave. O mapeamento e a redução são operações JavaScript personalizadas que o MongoDB executa na coleção.
Operações de Agregação de Único Propósito
O MongoDB também fornece algumas operações de agregação de único propósito, como contar o número de documentos, calcular a soma de valores e encontrar valores mínimos e máximos em uma coleção.
Exemplos de Operações de Agregação
Vamos considerar alguns exemplos de operações de agregação no MongoDB. Suponha que temos uma coleção 'orders' com documentos que contêm 'customer_id' e 'amount'.
Para encontrar a soma total de 'amount' para cada 'customer_id', podemos usar a pipeline de agregação com o operador $group:
db.orders.aggregate([ { $group : { _id : "$customer_id", total : { $sum : "$amount" } } } ])
Este código agrupa os documentos por 'customer_id' e soma os valores de 'amount' para cada grupo.
Para encontrar a soma total de 'amount' para todos os documentos, podemos usar o método map-reduce:
db.orders.mapReduce( function() { emit(null, this.amount); }, function(key, values) { return Array.sum(values); }, { out: "order_totals" } )
Este código emite a 'amount' de cada documento com uma chave nula e, em seguida, soma todos os valores emitidos.
Para contar o número de documentos na coleção, podemos usar a operação de agregação de único propósito 'count':
db.orders.count()
Este código retorna o número de documentos na coleção 'orders'.
As operações de agregação no MongoDB são uma maneira poderosa e flexível de trabalhar com dados. Elas permitem que você processe e transforme seus documentos de várias maneiras para obter os resultados desejados.