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$slicemodifiers 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.