Pular para o conteúdo
Tecnologia

Aggregation pipeline é SQL do MongoDB. Filtra, agrupa, transforma documentos. Processa bilhões de docs com performance.

Conceitos Principais

Pipeline Stages

Array de stages. Cada stage transforma docs. $match → $group → $sort → $project. Output de um é input do próximo.

$match

Filtra documentos. Equivalente a WHERE. Coloque early no pipeline. Usa índices.

$group

Agrupa por field. Acumulators: $sum, $avg, $max, $min. Equivalente a GROUP BY.

$lookup

JOIN entre collections. Left outer join. Pode ser lento se não otimizado.

Passo a Passo

  1. Aggregation Básico: db.orders.aggregate([{ $match: { status: "completed" }}, { $group: { _id: "$product", total: { $sum: "$quantity" }}}, { $sort: { total: -1 }}, { $limit: 10 }]);
  2. $lookup JOIN: db.orders.aggregate([{ $lookup: { from: "products", localField: "productId", foreignField: "_id", as: "product" }}, { $unwind: "$product" }]);
  3. $project Shape: { $project: { _id: 0, userName: "$user.name", total: { $multiply: ["$price", "$quantity"] }}}. Seleciona e transforma fields.
  4. Performance: $match e $sort early. Use índices. $lookup pode ser lento (denormalize se possível). $limit após $sort.
  5. Node.js: const pipeline = [{ $match: {...}}, { $group: {...}}]; const results = await collection.aggregate(pipeline).toArray();

Boas Praticas

Recomendacoes

• $match early (usa índices)

• $project early (menos dados)

• Índices em $match e $sort fields

• Denormalize ao invés de $lookup quando possível

• allowDiskUse: true para datasets grandes

• Explain pipeline para otimizar

Erros Comuns

Evite estes erros

• $lookup sem índices (lento)

• $match depois de $group (processa tudo)

• Não usar $project (transfere dados desnecessários)

• Pipeline muito complexo (quebrar em etapas)

• Não testar performance

Checklist

  • Pipeline básico funcionando
  • $match com índices
  • $lookup otimizado
  • $project reduzindo dados
  • Performance testada
  • Explain executado