Hvis du har en samling dokumenter i MongoDB, der indeholder arrays, kan du tilføje nye værdier til disse arrays, hvis det kræves.
Afhængigt af dine specifikke krav kan du bruge $push
operatoren eller $addToSet
operatør.
$push
Operatør
Antag, at vi har en samling kaldet products
med følgende dokumenter:
{ "_id" :1, "product" :"Flagermus", "størrelser" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L" ] }Og lad os sige, at vi ønsker at tilføje en værdi til arrayet i dokument 3.
Vi kan bruge
$push
i forbindelse medupdate()
for at tilføje værdien:db.products.update( { _id: 3 }, { $push: { sizes: "XL" } } )
Lad os se på samlingen igen for at bekræfte ændringen:
db.products.find()
Resultat:
{ "_id" :1, "product" :"Flagermus", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L", "XL" ] }Vi kan se, at værdien
XL
er blevet tilføjet til arrayet i dokument 3.
$push
operator kan også bruges med forskellige modifikatorer, såsom$position
,$sort
, og$slice
.Du kan også tilføje flere værdier til arrayet ved at bruge
$each
modifikator.Se MongoDB
$push
for eksempler.
$addToSet
Operatør
$addToSet
operatoren fungerer på samme måde som$push
, bortset fra et par ting:
- Hvis den værdi, du forsøger at tilføje, allerede findes i arrayet, vil den ikke blive tilføjet.
$position
,$sort
, og$slice
modifikatorer kan ikke bruges med$addToSet
.
Antag, at vores samling ser sådan ud:
{ "_id" :1, "product" :"Flagermus", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Hat", "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Kasket", "størrelser" :[ "S", "M" , "L", "XL" ] }
Lad os indsætte flere værdier i arrayet i dokument 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Lad os nu tjekke samlingen igen:
db.products.find()
Resultat:
{ "_id" :1, "product" :"Flagermus", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Hat", "sizes" :[ "S", "L", "XL", "XXL", "XXXL" ] }{ "_id" :3, "product" :"Kasket", "størrelser" :[ "S", "M", "L", "XL" ] }
Vi kan se, at de to værdier blev tilføjet til arrayet i dokument 2 som forventet.
Dette eksempel bruger $each
modifikator, som du også kan bruge med $push
operatør.
Jeg brugte kun $each
modifikator, fordi jeg tilføjede flere værdier. Hvis jeg kun brugte én værdi, kunne jeg have udeladt $each
modifikator, og syntaksen ville have lignet ovenstående $push
eksempel.
Som nævnt, hvis værdien allerede eksisterer, vil den ikke blive tilføjet. Hvis du tilføjer et array med begge operatorer, vil hele arrayet blive tilføjet som en separat værdi inden for det eksisterende array.
Se MongoDB $addToSet
for flere eksempler.