MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Inserisci un valore in una posizione specifica in un array in MongoDB

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.