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.