$group (Agrupar Documentos)
Última atualização: 2026-10-09
$group (Agrupar Documentos)
$group agrupa documentos por uma chave especificada (_id) e aplica expressões de acumulador ($sum/$avg/$max...) por grupo. É o estágio de pipeline mais poderoso, equivalente ao GROUP BY do SQL. O _id pode ser um caminho de campo ("$field") ou uma expressão composta que define a chave de grupo.
| Categoria | Estágios Principais |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $group: { _id: <chave-de-grupo>, <campo>: { <acumulador>: <expr> }, ... } }
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $group: contagem e total por status
db.orders.aggregate([
{ $group: { _id: "$status", count: { $sum: 1 }, total: { $sum: "$amount" } } }
])
Saída:
{ "_id": "A", "count": 2, "total": 380 }
{ "_id": "B", "count": 1, "total": 130 }
📌 Notas
- _id é obrigatório; use null para agrupar todos os documentos
- Campos de saída podem ser apenas acumuladores ou a expressão _id; recupere campos de origem via $first/$last
- $group quebra a ordem dos documentos; reordene com $sort depois se necessário
🏷️ Tags Relacionados
💡 Casos Relacionados
Pipelines de agregação avançados: expressões e transformações complexas
Introdução aos pipelines de agregação: o método `aggregate` e o estágio básico
Prática: CRUD para um sistema de comentários de blog
Fluxos de alterações: monitoramento de alterações em tempo real
$facet + $bucket + Pesquisa de texto/geoespacial
$lookup e associações com múltiplos conjuntos
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
Q$group é totalmente equivalente ao GROUP BY do SQL?
AEquivalente no núcleo, mas mais flexível: _id pode ser qualquer expressão, e colunas não agregadas devem ser recuperadas via $first/$push em vez de selecionadas diretamente.
Q_id é obrigatório em $group?
ASim. _id define a chave de agrupamento e pode ser um campo, uma expressão ou um objeto composto; passar null agrega todos os documentos em um único grupo.
QA ordem dos campos de saída de $group é estável?
AO MongoDB não garante a ordem da saída de $group nem a sequência de agrupamento. Adicione um estágio $sort depois para impor a ordenação.