Definição
Observação
Desambiguação
$setO operador
$setsubstitui 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
quantitypara500detailscampo com novo documento incorporadotagscampo 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.