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

2 modi per aggiungere un valore a un array in MongoDB

Se hai una raccolta di documenti in MongoDB che contiene array, puoi aggiungere nuovi valori a quegli array, se necessario.

A seconda delle tue esigenze specifiche, puoi utilizzare il $push o l'operatore $addToSet operatore.

Il $push Operatore

Supponiamo di avere una collezione chiamata products con i seguenti documenti:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }

E supponiamo di voler aggiungere un valore all'array nel documento 3.

Possiamo usare $push insieme a update() per aggiungere il valore:

db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
)

Esaminiamo nuovamente la collezione per verificare la modifica:

db.products.find()

Risultato:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L", "XL" ] }

Possiamo vedere che il valore XL è stato aggiunto all'array nel documento 3.

Il $push l'operatore può essere utilizzato anche con vari modificatori, come $position , $sort e $slice .

Puoi anche aggiungere più valori all'array usando $each modificatore.

Vedi MongoDB $push per esempi.

Il $addToSet Operatore

Il $addToSet l'operatore funziona in modo simile a $push , fatta eccezione per un paio di cose:

  • Se il valore che stai cercando di aggiungere esiste già nell'array, non verrà aggiunto.
  • Il $position , $sort e $slice i modificatori non possono essere utilizzati con $addToSet .

Supponiamo che la nostra collezione sia simile a questa:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Inseriamo più valori nell'array nel documento 2:

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Ora controlliamo di nuovo la collezione:

db.products.find()

Risultato:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Possiamo vedere che i due valori sono stati aggiunti all'array nel documento 2 come previsto.

Questo esempio usa il $each modificatore, che puoi usare anche con il $push operatore.

Ho usato solo il $each modificatore perché stavo aggiungendo più valori. Se avessi usato un solo valore, avrei potuto omettere $each modificatore e la sintassi sarebbe stata più simile a $push sopra esempio.

Come accennato, se il valore esiste già, non verrà aggiunto. Inoltre, con entrambi gli operatori, se si aggiunge un array, l'intero array verrà aggiunto come valore separato all'interno dell'array esistente.

Vedi MongoDB $addToSet per altri esempi.