Om du har en samling dokument i MongoDB som innehåller arrayer kan du lägga till nya värden till dessa arrayer om det behövs.
Beroende på dina specifika krav kan du använda $push operatorn eller $addToSet operatör.
$push Operatör
Anta att vi har en samling som heter products med följande dokument:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L" ] }
Och låt oss säga att vi vill lägga till ett värde till arrayen i dokument 3.
Vi kan använda $push i kombination med update() för att lägga till värdet:
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
Låt oss titta på samlingen igen för att verifiera ändringen:
db.products.find()
Resultat:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L", "XL" ] }
Vi kan se att värdet XL har lagts till i arrayen i dokument 3.
$push operatorn kan också användas med olika modifierare, såsom $position , $sort och $slice .
Du kan också lägga till flera värden till arrayen genom att använda $each modifierare.
Se MongoDB $push för exempel.
$addToSet Operatör
$addToSet operatorn fungerar på liknande sätt som $push , förutom ett par saker:
- Om värdet du försöker lägga till redan finns i arrayen kommer det inte att läggas till.
$position,$sortoch$slicemodifierare kan inte användas med$addToSet.
Anta att vår samling ser ut så här:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Hatt", "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "S", "M" , "L", "XL" ] } Låt oss infoga flera värden i arrayen i dokument 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
) Låt oss nu kontrollera samlingen igen:
db.products.find() Resultat:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Hatt", "sizes" :[ "S", "L", "XL", "XXL", "XXXL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "S", "M", "L", "XL" ] } Vi kan se att de två värdena lades till arrayen i dokument 2 som förväntat.
Det här exemplet använder $each modifierare, som du också kan använda med $push operatör.
Jag använde bara $each modifierare eftersom jag lade till flera värden. Om jag bara använde ett värde, kunde jag ha utelämnat $each modifierare, och syntaxen skulle ha sett mer ut som ovanstående $push exempel.
Som nämnts, om värdet redan finns, kommer det inte att läggas till. Om du lägger till en array med båda operatorerna kommer hela arrayen att läggas till som ett separat värde inom den befintliga arrayen.
Se MongoDB $addToSet för fler exempel.