Als u een verzameling documenten in MongoDB hebt die arrays bevatten, kunt u indien nodig nieuwe waarden aan die arrays toevoegen.
Afhankelijk van uw specifieke vereisten, kunt u de $push
. gebruiken operator of de $addToSet
telefoniste.
De $push
Operator
Stel dat we een verzameling hebben met de naam products
met de volgende documenten:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
En laten we zeggen dat we een waarde willen toevoegen aan de array in document 3.
We kunnen $push
. gebruiken in combinatie met update()
om de waarde toe te voegen:
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
Laten we de collectie nogmaals bekijken om de wijziging te verifiëren:
db.products.find()
Resultaat:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L", "XL" ] }
We kunnen zien dat de waarde XL
is toegevoegd aan de array in document 3.
De $push
operator kan ook worden gebruikt met verschillende modificaties, zoals $position
, $sort
, en $slice
.
U kunt ook meerdere waarden aan de array toevoegen met behulp van de $each
modificatie.
Zie MongoDB $push
voor voorbeelden.
De $addToSet
Operator
De $addToSet
operator werkt op dezelfde manier als $push
, op een paar dingen na:
- Als de waarde die u probeert toe te voegen al in de array bestaat, wordt deze niet toegevoegd.
- De
$position
,$sort
, en$slice
modifiers kunnen niet worden gebruikt met$addToSet
.
Stel dat onze collectie er zo uitziet:
{ "_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" ] }
Laten we meerdere waarden invoegen in de array in document 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Laten we nu de collectie nog eens bekijken:
db.products.find()
Resultaat:
{ "_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" ] }
We kunnen zien dat de twee waarden zoals verwacht aan de array in document 2 zijn toegevoegd.
Dit voorbeeld gebruikt de $each
modifier, die u ook kunt gebruiken met de $push
telefoniste.
Ik heb alleen de $each
. gebruikt modifier omdat ik meerdere waarden aan het toevoegen was. Als ik maar één waarde had gebruikt, had ik de $each
. kunnen weglaten modifier, en de syntaxis zou meer lijken op de bovenstaande $push
voorbeeld.
Zoals gezegd, als de waarde al bestaat, wordt deze niet toegevoegd. Als u met beide operators een array toevoegt, wordt de hele array toegevoegd als een afzonderlijke waarde binnen de bestaande array.
Zie MongoDB $addToSet
voor meer voorbeelden.