$set
Definição
Observação
Desambiguação
$set
O operador
$set
substitui o valor de um campo pelo valor especificado.
Compatibilidade
Você pode utilizar o $set
para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
A expressão do operador $set
tem o seguinte formato:
{ $set: { <field1>: <value1>, ... } }
Para especificar um <field>
em um documento incorporado ou em uma array, use a notação de ponto.
Comportamento
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
Se o campo não existir, $set
adicionará um novo campo com o valor especificado, desde que o novo campo não viole uma restrição de tipo. Se você especificar um caminho pontilhado para um campo inexistente, $set
criará os documentos incorporados conforme necessário para preencher o caminho pontilhado para o campo.
Se você especificar vários pares campo-valor, $set
atualizará ou criará cada campo.
A partir do MongoDB 5.0, mongod
não gera mais um erro ao usar um operador de atualização como $set
com uma expressão de operando vazia ( { }
). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).
Exemplos
Crie a coleção products
:
db.products.insertOne( { _id: 100, quantity: 250, instock: true, reorder: false, details: { model: "14QQ", make: "Clothes Corp" }, tags: [ "apparel", "clothing" ], ratings: [ { by: "Customer007", rating: 4 } ] } )
Definir campos de nível superior
Para o documento que corresponde aos critérios _id
iguais a 100
, a operação a seguir usa o operador $set
para atualizar o valor dos campos quantity
, details
e tags
.
db.products.updateOne( { _id: 100 }, { $set: { quantity: 500, details: { model: "2600", make: "Fashionaires" }, tags: [ "coats", "outerwear", "clothing" ] } } )
A operação atualiza o:
valor de
quantity
para500
details
campo com novo documento incorporadotags
campo com nova array
{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Fashionaires' }, tags: [ 'coats', 'outerwear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 4 } ] }
Definir campos em documentos incorporados
Para especificar um <field>
em um documento incorporado ou em uma array, use a notação de ponto.
Para o documento que corresponde aos critérios _id
iguais a 100
, a operação a seguir atualiza o campo make
no documento details
:
db.products.updateOne( { _id: 100 }, { $set: { "details.make": "Kustom Kidz" } } )
Após a atualização, o documento tem os seguintes valores:
{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Kustom Kidz' }, tags: [ 'coats', 'outerwear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 4 } ] }
Importante
O código acima utiliza dot notation
para atualizar o campo make
do documento details
incorporado. O formato de código parece semelhante ao seguinte exemplo de código, que em vez disso substitui todo o documento incorporado, removendo todos os outros campos no documento details
encorporado:
db.products.updateOne( { _id: 100 }, { $set: { details: {make: "Kustom Kidz"} } })
Definir elementos em arrays
Para especificar um <field>
em um documento incorporado ou em uma array, use a notação de ponto.
Para o documento que corresponde aos critérios _id
iguais a 100
, a operação a seguir atualiza o segundo elemento de valor (índice de array de 1
) no campo tags
e o campo rating
no primeiro elemento (índice de array de 0
) da array ratings
.
db.products.updateOne( { _id: 100 }, { $set: { "tags.1": "rain gear", "ratings.0.rating": 2 } } )
Após a atualização, o documento tem os seguintes valores:
{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Kustom Kidz' }, tags: [ 'coats', 'rain gear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 2 } ] }
Para operadores de atualização adicionais para arrays, consulte Operadores de atualização de array.