MongoDB $set
operator aktualizacji zastępuje wartość pola określoną wartością.
Jest używany w połączeniu z operacjami aktualizacji, na przykład podczas korzystania z update()
metoda aktualizacji dokumentu.
Przykład
Załóżmy, że mamy kolekcję o nazwie dogs
z następującym dokumentem:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
I załóżmy, że chcemy zmienić wagę psa. Możemy uruchomić następującą update()
polecenie aktualizacji wagi:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Spowoduje to następujący wynik:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Co mówi nam, że jeden dokument został dopasowany i zmodyfikowany.
Sprawdźmy kolekcję:
db.dogs.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Widzimy, że waga została zaktualizowana do określonej wartości.
Możliwe jest również zwiększenie wartości o określoną kwotę, ale w tym celu musielibyśmy użyć $inc
operator zamiast $set
.
Ale ten artykuł dotyczy $set
operatora, więc kontynuujmy.
Kiedy pole nie istnieje
Jeśli pole, które próbujesz zaktualizować, nie istnieje, zostanie ono dodane do dokumentu z określoną wartością.
Przykład:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Widzimy, że jeden dokument został dopasowany i zmodyfikowany.
Sprawdźmy ponownie kolekcję.
db.dogs.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Więc teraz dokument zawiera height
pole o określonej wartości.
Osadzone dokumenty
Możesz aktualizować wartości w osadzonych dokumentach za pomocą notacji kropkowej. Jeśli określona ścieżka jeszcze nie istnieje, zostanie utworzona.
Przykład:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Wyjście:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Użyjmy findOne()
aby zwrócić dokument:
db.dogs.findOne()
Wynik:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Widzimy, że osadzony dokument został dodany zgodnie z opisem.
Tablice
Możesz aktualizować dane w tablicach, używając notacji kropkowej podczas określania indeksu elementu, który chcesz zaktualizować.
Załóżmy, że mamy następujący dokument:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Zaktualizujmy dwa elementy tablicy i imię psa.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Wynik:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Widzimy, że jeden dokument został dopasowany i zmodyfikowany.
A teraz spójrz na dokument.
db.dogs.findOne()
Wynik:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }