3.3.3.6 - Inserció en Arrays: $push
La manera més senzilla d'introduir un element en un array és utilitzar $push sense més. Si existia l'array, introduirà el o els nous elements al final. Si no existia l'array, el crearà amb aquest o aquestos elements.
La sintaxi és:
{ $push : { clau : element } }
Per exemple anem a afegir una nota a l'alumne de sempre, i posem-la diferent per veure que s'introdueix al final:
> db.alumnes.update( {nom:"Abel"} , { $push : { nota : 7 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
"_id" : ObjectId("56df11d778549bdfbf2125e3"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 22,
"adreça" : {
"carrer" : "Major",
"numero" : 7,
"cp" : "12502"
},
"nota" : [
9.5,
7.5,
9,
7
]
}
Tambe hi ha manera d'introduir un element en una determinada posició que no siga al final, però es complica prou la cosa, ja que hem d'utilitzar per una banda el modificador $position per a dir on s'ha d'inserir, i per una altra banda el modificador $each per a poder especificar el o els valors que es volen inserir. Es posa a continuació únicament de forma il·lustrativa.
Per a inserir en una determinada posició hem d'utilitzar obligatòriament 2 modificadors més:
- $position indicarà a partir de quina posició es farà l'acció (normalment d'inserir en l'array, és a dir, $push
- $each ens permet especificar una sèrie de valors com un array, i vol dir que es farà l'operació per a cada valor de l'array
Els dos modificadors seguiran la sintaxi de sempre, de clau valor, per tant el conjunt de la sintaxi és:
{ $ push :
{ clau_del_array :
{ $position : posició ,
$each : [ valors ]
}
}
}
Ací tenim un exemple on introduïm una nota en la primera posició:
> db.alumnes.update( {nom:"Abel"} , { $push : { nota : { $position : 0 , $each : [5] } } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
"_id" : ObjectId("56df11d778549bdfbf2125e3"),
"nom" : "Abel",
"cognoms" : "Bernat Carrera",
"edat" : 22,
"adreça" : {
"carrer" : "Major",
"numero" : 7,
"cp" : "12502"
},
"nota" : [
5,
9.5,
7.5,
9,
7
]
}
Llicenciat sota la Llicència Creative Commons Reconeixement SenseObraDerivada 4.0