O
$set
do MongoDB O operador de atualização substitui o valor de um campo pelo valor especificado. É usado em conjunto com operações de atualização, por exemplo, ao usar o
update()
método para atualizar um documento. Exemplo
Suponha que tenhamos uma coleção chamada
dogs
com o seguinte documento:{ "_id" : 1, "name" : "Wag", "weight" : 20 }
E suponha que queremos mudar o peso do cachorro. Podemos executar o seguinte
update()
comando para atualizar o peso:db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Isso resultará na seguinte saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
O que nos diz que um documento foi correspondido e modificado.
Vamos conferir a coleção:
db.dogs.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Podemos ver que o peso foi atualizado para o valor especificado.
Também é possível incrementar valores por um valor especificado, mas para isso precisaríamos usar o
$inc
operador em vez de $set
. Mas este artigo é sobre o
$set
operador, então vamos continuar. Quando o campo não existe
Se o campo que você está tentando atualizar não existir, o campo será adicionado ao documento com o valor especificado.
Exemplo:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Podemos ver que um documento foi correspondido e modificado.
Vamos verificar a coleção novamente.
db.dogs.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Então agora o documento inclui uma
height
campo com o valor especificado. Documentos incorporados
Você pode atualizar valores em documentos incorporados usando a notação de ponto. Se o caminho especificado ainda não existir, ele será criado.
Exemplo:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vamos usar
findOne()
para devolver o documento:db.dogs.findOne()
Resultado:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Podemos ver que o documento incorporado foi adicionado conforme especificado.
Matrizes
Você pode atualizar dados em matrizes usando a notação de ponto enquanto especifica o índice do elemento que deseja atualizar.
Suponha que temos o seguinte documento:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Vamos atualizar dois dos elementos do array e o nome do cachorro.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Resultado:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Podemos ver que um documento foi correspondido e modificado.
E agora olhe para o documento.
db.dogs.findOne()
Resultado:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }