W MongoDB możesz użyć $push
operatora, aby dodać wartość do tablicy.
Ten operator może być używany z różnymi modyfikatorami, z których jednym jest $position
modyfikator. $position
modyfikator pozwala określić pozycję w tablicy, do której chcesz wstawić nową wartość.
Dodaj wartość na początku tablicy
Załóżmy, że mamy następującą kolekcję:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] }
I załóżmy, że chcemy dodać wartość na początku tablicy w dokumencie 3.
Możemy to zrobić:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
)
Teraz ponownie sprawdźmy kolekcję:
db.products.find()
Wynik:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Tablice są liczone od zera, więc position: 0
dodaje wartość jako pierwszy element tablicy.
Dodaj wartość do środka tablicy
Załóżmy, że chcemy dodać wartość M
do dokumentu 2 i chcemy, aby znalazł się między S
i L
.
Oto, jak możemy to zrobić:
db.products.update(
{ _id: 2 },
{
$push: {
sizes: {
$each: [ "M" ],
$position: 1
}
}
}
)
Teraz ponownie sprawdźmy kolekcję:
db.products.find()
Wynik:
{ "_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" ] }
Użyliśmy $position: 1
, bo taką pozycję chcieliśmy M
iść (tj. druga pozycja).
Wartości ujemne
Jako pozycję możesz również podać wartość ujemną. Gdy to zrobisz, wartość zostanie wstawiona w określonej ujemnej pozycji, licząc od końca.
Załóżmy, że chcemy wstawić L
pomiędzy M
i XL
w dokumencie 1.
Oto, jak zabralibyśmy się do tego, używając pozycji ujemnej:
db.products.update(
{ _id: 1 },
{
$push: {
sizes: {
$each: [ "L" ],
$position: -1
}
}
}
)
Sprawdź wynik:
db.products.find()
Wynik:
{ "_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" ] }
Z ujemną pozycją indeksu, jeśli określisz wiele elementów w $each
tablicy, ostatni dodany element znajduje się na określonej pozycji od końca.