3.3.3.1 - $set
El modificador $set assigna un valor a un camp del document seleccionat de la Base de Dades. Si el camp ja existia, modificarà el valor, i si no existia el crearà.
La sintaxi del modificador $set és la següent:
{ $set : { clau : valor} }
Però recordeu que és un modificador, i l'hem d'utilitzar dins d'una operació d'actualització. Anirà en el segon paràmetre del update(), i per tant amb aquestos modificadors ja no posem tot el document en el segon paràmetre, sinó únicament l'operador de modificació.
Mirem-ho millor en un exemple:
> db.alumnes.insert( {nom:"Abel", cognoms:"Bernat Carrera"} )
WriteResult({ "nInserted" : 1 })
>
> db.alumnes.findOne()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera"
}
>
Suposem ara que li volem afegir l'edat. Abans ho faríem guardant el document en una variable, i afegint el camp, per a guardar després. Ara ho tenim més fàcil:
> db.alumnes.update( {nom:"Abel"} , { $set: {edat:21} } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ha trobat un, i l'ha modificat. Evidentment, si hi haguera més d'un alumne a mb el nom Abel, els modificaria tots.
> db.alumnes.findOne()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 21
}
Es pot especificar més d'un camp amb els valor corresponents. Si no existien es crearan, i si ja existien es modificaran:
> db.alumnes.update( {nom:"Abel"} , { $set: {nota: 8.5 , edat:22} } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 22,
"nota" : 8.5
}
I fins i tot es pot canviar el tipus d'un camp determinat, i utilitzar arrays, i objectes, ...
> db.alumnes.update( {nom:"Abel"} , { $set: {nota: [8.5,7.5,9] , adreça:{carrer:"Major",numero:7,cp:"12001"} } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 22,
"nota" : [
8.5,
7.5,
9
],
"adreça" : {
"carrer" : "Major",
"numero" : 7,
"cp" : "12001"
}
}
Podem fins i tot modificar ara només el valor d'un camp d'un objecte del document. Per exemple, anem a modificar el codi postal de l'anterior alumne. La manera d'arribar al codi postal serà adreça.cp, però haurem d'anar amb compte que vaja entre cometes per a que el trobe:
> db.alumnes.update( {nom:"Abel"} , { $set: {adreça.cp:"12502"} } )
2016-03-08T13:19:59.744+0100 E QUERY [thread1] SyntaxError: missing : after property id @(shell):1:49
> db.alumnes.update( {nom:"Abel"} , { $set: {"adreça.cp":"12502"} } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
"_id" : ObjectId("56debe3017bf4ed437dc77c8"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 22,
"nota" : [
8.5,
7.5,
9
],
"adreça" : {
"carrer" : "Major",
"numero" : 7,
"cp" : "12502"
}
}
Llicenciat sota la Llicència Creative Commons Reconeixement SenseObraDerivada 4.0