Gerador de MongoDB aggregate()
Constrói pipelines aggregate() do MongoDB com $match, $group, $sort, $limit em sequência. Pronto para colar.
Pipeline de Agregação do MongoDB
O pipeline de agregação é a primitiva de processamento de dados mais poderosa do MongoDB. Um pipeline é um array de estágios executados em ordem — cada estágio transforma o stream de documentos e alimenta o próximo: db.collection.aggregate([{ $match: ... }, { $group: ... }, { $sort: ... }]). Ele substitui o antigo mapReduce, roda paralelizado nativamente no engine de storage e é a base de qualquer dashboard, relatório de BI e query analítica em projetos modernos.
Estágios principais
$match— filtro como ofind; coloque-o primeiro para usar índice.$project,$addFields/$set,$replaceRoot— remodelam documentos.$group— agrupa por expressão e aplica acumuladores.$sort,$limit,$skip,$count,$sample.$unwind— desnormaliza arrays, um documento por elemento.$lookup— JOIN à esquerda contra outra coleção.$facet— roda vários sub-pipelines em paralelo retornando um único documento.$bucket,$bucketAuto— histogramas.$out,$merge— gravam o resultado em coleção (views materializadas).$densify,$fill— preenchimento de séries temporais (MongoDB 5.1+).
Acumuladores de grupo e expressões
Dentro do $group: $sum, $avg, $min, $max, $count, $push (array), $addToSet (conjunto), $first, $last, $stdDevPop/$stdDevSamp, $median/$percentile (5.0+). Expressões condicionais aparecem em todo lugar: $cond (if/else), $switch, $ifNull; aritmética com $multiply, $divide, $mod; strings com $concat, $toUpper, $regexMatch; datas com $dateToString, $dateDiff.
Exemplo prático — top 10 clientes
db.orders.aggregate([
{ $match: { status: "completed", createdAt: { $gte: ISODate("2025-01-01") } } },
{ $group: { _id: "$userId", total: { $sum: "$amount" }, orders: { $sum: 1 } } },
{ $sort: { total: -1 } },
{ $limit: 10 },
{ $lookup: { from: "users", localField: "_id", foreignField: "_id", as: "user" } },
{ $unwind: "$user" },
{ $project: { _id: 0, nome: "$user.name", total: 1, orders: 1 } }
])
Performance
Regras práticas: empurre $match e $project o mais cedo possível; só o primeiro estágio usa índice, então um $match + $sort na frente é o que mais importa. O otimizador reordena estágios quando é seguro. Limite duro: 100 MB de RAM por estágio; passe { allowDiskUse: true } para agrupamentos/sorts grandes. Cada documento ainda tem teto de 16 MB. Inspecione o plano com db.collection.aggregate(pipeline).explain('executionStats'). O Atlas Search adiciona o estágio $search com Lucene para busca textual/vetorial.
Perguntas frequentes
Agregação substitui o MapReduce? Sim. O mapReduce está depreciado desde o MongoDB 5.0 — a agregação é mais rápida, roda em paralelo e cobre quase todos os padrões de JS com operadores nativos.
Meu $match usa índice? Só se for o primeiro estágio e o campo estiver indexado. Um $match após $project ou $group roda sobre documentos intermediários, sem índice.
O pipeline está complicado demais para escrever na mão? Use o MongoDB Compass — a aba Aggregation tem builder visual com preview ao vivo; o Studio 3T oferece uma UI drag-and-drop ainda mais rica e exporta para JS/Python/Java.
Dá para materializar uma view? Sim — termine o pipeline com $out: "summary" (substitui a coleção) ou $merge (upsert), e agende como Atlas Trigger ou cron externo. db.createView() também reaproveita pipelines para views só-leitura.
Ferramentas Relacionadas
Gerador de MongoDB find()
Constrói uma query find() do MongoDB a partir de filtros (campo: valor), projeção e ordenação. Usa operadores $eq, $gt, $in.
Paleta Complementar
Gere a cor complementar (oposta na roda de cores) a partir de uma cor base em hex. Crie combinações de alto contraste para design, sites e identidade visual.
Paleta Tetrádica
Gere uma paleta tetrádica (quatro cores em retângulo na roda de cores) a partir de uma cor base. Esquema rico e equilibrado para design, sites e branding.