In MongoDB kunt u de $push
. gebruiken operator om een waarde aan een array toe te voegen.
Deze operator kan worden gebruikt met verschillende modificaties, waaronder de $position
modificator. De $position
modifier stelt u in staat om de positie binnen de array te specificeren waar u de nieuwe waarde wilt invoegen.
Waarde toevoegen aan het begin van de array
Stel dat we de volgende verzameling hebben:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] }
En stel dat we een waarde willen toevoegen aan het begin van de array in document 3.
We kunnen dit:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
)
Laten we nu de collectie nog eens bekijken:
db.products.find()
Resultaat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Arrays zijn gebaseerd op nul, dus position: 0
voegt de waarde toe als het eerste element in de array.
Voeg een waarde toe aan het midden van de array
Stel dat we de waarde M
. willen toevoegen naar document 2, en we willen dat het tussen S
. gaat en L
.
Hier is hoe we dat kunnen doen:
db.products.update(
{ _id: 2 },
{
$push: {
sizes: {
$each: [ "M" ],
$position: 1
}
}
}
)
Laten we nu de collectie nog eens bekijken:
db.products.find()
Resultaat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
We gebruikten $position: 1
, want dat is de positie die we wilden M
te gaan (d.w.z. de tweede positie).
Negatieve waarden
U kunt ook een negatieve waarde als positie opgeven. Wanneer u dit doet, wordt de waarde ingevoegd op de gespecificeerde negatieve positie, terugtellend vanaf het einde.
Stel dat we L
. willen invoegen tussen M
en XL
in document 1.
Hier is hoe we dat zouden doen met een negatieve positie:
db.products.update(
{ _id: 1 },
{
$push: {
sizes: {
$each: [ "L" ],
$position: -1
}
}
}
)
Controleer het resultaat:
db.products.find()
Resultaat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Met een negatieve indexpositie, als u meerdere elementen opgeeft in de $each
array, het laatst toegevoegde element bevindt zich vanaf het einde op de opgegeven positie.