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.