aggregate() (Pipeline de Agregação)
Última atualização: 2026-10-09
aggregate() (Pipeline de Agregação)
aggregate() executa um pipeline de múltiplos estágios que agrupa, calcula e remodela documentos, ex.: `db.users.aggregate([{ $group: { _id: '$city', total: { $sum: 1 } } }])`. Estágios como $match, $group, $sort e $project transformam os dados em sequência. Muito mais poderoso que find(), é a escolha ideal para relatórios e pivôs. O pipeline roda no servidor e retorna um cursor (ou resultados inline).
| Categoria | Leitura |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
db.<collection>.aggregate(<pipeline>, { allowDiskUse: <bool> })
⚙️ Parâmetros
| pipeline | Matriz de estágios de pipeline, por exemplo [{$match: {...}}, {$group: {...}}]. |
|---|---|
| allowDiskUse | Opcional. true permite que resultados intermediários acima de 100MB sejam gravados em disco. |
Retorno:Cursor sobre os resultados da agregação; vazio quando $out/$merge gravam em uma coleção.
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// aggregate: conta usuários agrupados por cidade
const result = db.users.aggregate([
{ $group: { _id: '$address.city', total: { $sum: 1 } } },
{ $sort: { total: -1 } }
])
result.toArray()
Saída:
[
{ _id: 'Beijing', total: 12 },
{ _id: 'Shanghai', total: 8 }
]
📌 Notas
- A ordem dos estágios importa — coloque $match cedo para filtrar o quanto antes
- Os estágios têm um limite de memória padrão de 100MB; exceda-o com allowDiskUse: true
- Referencie campos originais dentro de $group _id com prefixo $, ex.: '$age'
🏷️ Tags Relacionados
💡 Casos Relacionados
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre aggregate e find?
Afind() apenas consulta e projeta; aggregate() pode agrupar, contar, somar e unir — feito para relatórios.
QE se a agregação exceder o limite de memória?
APasse {allowDiskUse: true} para despejar resultados intermediários em disco, ou otimize com um $match antecipado.
QComo consumo os resultados da agregação?
AEla retorna um cursor — chame .toArray() ou itere; com $out o cursor volta vazio, pois os resultados vão para uma coleção.