In MongoDB, puoi usare $push
per aggiungere un valore a una matrice.
Questo operatore può essere utilizzato con vari modificatori, uno dei quali è $position
modificatore. Il $position
modificatore consente di specificare la posizione all'interno dell'array in cui si desidera inserire il nuovo valore.
Aggiungi valore all'inizio dell'array
Supponiamo di avere la seguente collezione:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] }
E supponiamo di voler aggiungere un valore all'inizio dell'array nel documento 3.
Possiamo farlo:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
)
Ora controlliamo di nuovo la collezione:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Gli array sono a base zero, quindi position: 0
aggiunge il valore come primo elemento nell'array.
Aggiungi un valore al centro dell'array
Supponiamo di voler aggiungere il valore M
al documento 2 e vogliamo che vada tra S
e L
.
Ecco come possiamo farlo:
db.products.update(
{ _id: 2 },
{
$push: {
sizes: {
$each: [ "M" ],
$position: 1
}
}
}
)
Ora controlliamo di nuovo la collezione:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Abbiamo usato $position: 1
, perché questa è la posizione che volevamo M
andare (cioè la seconda posizione).
Valori negativi
Puoi anche fornire un valore negativo come posizione. Quando si esegue questa operazione, il valore viene inserito nella posizione negativa specificata contando a ritroso dalla fine.
Supponiamo di voler inserire L
tra M
e XL
nel documento 1.
Ecco come lo faremmo usando una posizione negativa:
db.products.update(
{ _id: 1 },
{
$push: {
sizes: {
$each: [ "L" ],
$position: -1
}
}
}
)
Controlla il risultato:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Con una posizione dell'indice negativa, se specifichi più elementi in $each
array, l'ultimo elemento aggiunto si trova nella posizione specificata dalla fine.