Este capítulo apresenta o MongoDB Aggregation Pipeline, que é principalmente usado para análise estatística, semelhante à declaração group by em SQL. No shell do MongoDB, a análise estatística é alcançada através da função db.collection.aggregate().

Conceito

O Pipeline de Agregação é um conceito abstrato que trata os dados como água fluindo por um pipeline. Podemos processar os dados em múltiplos estágios dentro do pipeline. Após um estágio processar os dados, os resultados processados são passados para o próximo estágio para processamento adicional.

Exemplos de aplicação do pipeline de agregação na análise estatística:

  • No primeiro estágio, um lote de dados de documento é recuperado da coleção com base em certas condições.
  • No segundo estágio, os dados de documento recuperados são agrupados e agregados.
  • No terceiro estágio, os dados agregados do segundo estágio são classificados.

Todo o processo é como uma operação de pipeline onde os dados fluem de uma extremidade do pipeline, passam por processamento em vários estágios e depois geram um resultado final.

Operadores Suportados pelo Pipeline do MongoDB

Abaixo estão os operadores comuns do pipeline suportados pelo MongoDB:

Operador Descrição
$match O estágio $match é usado para filtrar dados do documento com base em condições, semelhante à condição where em SQL.
$group O estágio $group é usado para agrupar e agregar dados do documento, semelhante à cláusula group by em SQL.
$sort Usado para classificar os dados.

Etapas para Usar o Pipeline de Agregação

Normalmente, três etapas estão envolvidas:

  • Filtrar os dados de destino usando $match.
  • Agrupar e agregar os dados usando $group.
  • Classificar os resultados usando $sort (opcional).

Exemplo:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

SQL Equivalente:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Nota: Para obter mais informações sobre análise estatística de agregados, consulte os capítulos subsequentes.