I MongoDB kan du använda $push
operator för att lägga till ett värde till en array.
Denna operator kan användas med olika modifierare, varav en är $position
modifierare. $position
modifierare låter dig ange positionen inom arrayen som du vill infoga det nya värdet.
Lägg till värde till början av arrayen
Anta att vi har följande samling:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "M", "L" ] }Och anta att vi vill lägga till ett värde till början av arrayen i dokument 3.
Vi kan göra detta:
db.products.update( { _id: 3 }, { $push: { sizes: { $each: [ "S" ], $position: 0 } } } )
Låt oss nu kontrollera samlingen igen:
db.products.find()
Resultat:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M", "L" ] }Matriser är nollbaserade, så
position: 0
lägger till värdet som det första elementet i arrayen.Lägg till ett värde i mitten av arrayen
Anta att vi vill lägga till värdet
M
till dokument 2, och vi vill att det ska gå mellanS
ochL
.Så här kan vi göra det:
db.products.update( { _id: 2 }, { $push: { sizes: { $each: [ "M" ], $position: 1 } } } )
Låt oss nu kontrollera samlingen igen:
db.products.find()
Resultat:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M" , "L" ] }Vi använde
$position: 1
, eftersom det var den positionen vi ville haM
att gå (dvs. den andra positionen).Negativa värden
Du kan också ange ett negativt värde som position. När du gör detta infogas värdet vid den angivna negativa positionen räknat tillbaka från slutet.
Anta att vi vill infoga
L
mellanM
ochXL
i dokument 1.Så här skulle vi gå tillväga med en negativ position:
db.products.update( { _id: 1 }, { $push: { sizes: { $each: [ "L" ], $position: -1 } } } )
Kontrollera resultatet:
db.products.find()
Resultat:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Hatt", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S" , "M", "L" ] }Med en negativ indexposition, om du anger flera element i
$each
array, är det senast tillagda elementet i den angivna positionen från slutet.