$addFields (Adicionar Campos)
Última atualização: 2026-10-09
$addFields (Adicionar Campos)
$addFields adiciona novos campos a cada documento, ou sobrescreve campos existentes, preservando todos os outros. Diferente de $project — que descarta campos não listados por padrão — $addFields apenas aumenta o documento. Novos valores podem ser qualquer expressão de agregação, frequentemente calculados a partir de resultados de $lookup. Desde o MongoDB 3.4 é equivalente a $set.
| Categoria | Estágios Principais |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $addFields: { <novoCampo>: <expressão>, ... } }
⚙️ Parâmetros
| novo campo | Nomes de campo mapeados para expressões que referenciam campos do documento de entrada. |
|---|
Retorno:Fluxo de documentos com campos adicionados ou sobrescritos
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $addFields: adiciona um campo total
db.sales.aggregate([
{ $addFields: { total: { $multiply: ['$price', '$qty'] } } }
])
Saída:
// Todos os campos originais mantidos, mais total
{ "item": "Pen", "price": 50, "qty": 3, "total": 150 }
📌 Notas
- $addFields nunca remove campos existentes
- Caminhos pontilhados como 'order.amount' acessam campos embutidos
- Dentro de um estágio, você não pode referenciar campos definidos no mesmo estágio
🏷️ Tags Relacionados
💡 Casos Relacionados
Pipelines de agregação avançados: expressões e transformações complexas
Fluxos de alterações: monitoramento de alterações em tempo real
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre $addFields e $set?
ADesde o MongoDB 3.4 eles são totalmente equivalentes; $addFields é o nome mais antigo.
Q$addFields pode referenciar seus novos campos?
ANão. Expressões em um estágio veem apenas o documento de entrada; encadeie vários estágios $addFields em vez disso.
Q$addFields sobrescreve campos existentes?
ASim. Um campo com nome existente é sobrescrito.