Użyj update()
metoda lub save()
metoda aktualizacji dokumentów w MongoDB.
W MongoDB zarówno update()
metoda i save()
metoda może być użyta do aktualizacji dokumentu.
update()
metoda aktualizuje wartości w istniejącym dokumencie lub dokumentach, podczas gdy save()
metoda zastępuje dokument dokumentem przekazanym jako parametr.
Jednak update()
metoda może również zastąpić cały dokument, w zależności od przekazanego parametru.
update()
Metoda
Oto przykład update()
metoda.
Najpierw wybierzmy rekord do aktualizacji:
db.musicians.find({ _id: 6 }).pretty()
Wynik:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff faktycznie robi dużo więcej niż tylko śpiewa. Dodajmy więc więcej instrumentów. Użyjemy $set
operatora, aby zaktualizować jedno pole.
db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Wynik:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Teraz, jeśli wykonamy inne zapytanie, zobaczymy, że dokument został zaktualizowany zgodnie z opisem:
db.musicians.find({ _id: 6 }).pretty()
Wynik:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Więcej opcji:
- Jeśli pole nie istnieje,
$set
operator doda nowe pole o określonej wartości, pod warunkiem, że nowe pole nie narusza ograniczenia typu. - Możesz również użyć
{ upsert: true }
aby utworzyć nowy dokument, gdy żaden dokument nie pasuje do zapytania. - Możesz użyć
{ multi: true }
aby zaktualizować wiele dokumentów, które spełniają kryteria zapytania. Domyślnie ta opcja jest ustawiona nafalse
, więc tylko jeden dokument jest aktualizowany, jeśli nie ustawisz go natrue
.
save()
Metoda
save()
metoda jest skrzyżowaniem update()
i insert()
. Kiedy używasz save()
metody, jeśli dokument istnieje, zostanie zaktualizowany. Jeśli nie istnieje, zostanie utworzony.
Jeśli nie określisz _id
MongoDB utworzy dokument z _id
który zawiera ObjectId
wartość (zgodnie z insert()
).
Jeśli określisz _id
pole, wykonuje aktualizację za pomocą { upsert: true }
, co oznacza, że tworzy nowy dokument, jeśli żaden dokument nie pasuje do zapytania.
Obecnie nie mamy żadnych dokumentów u naszych
producentów
kolekcja. Stwórzmy go za pomocą save()
metoda:
db.producers.save({ _id: 1, name: "Bob Rock" })
Wynik:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Teraz, jeśli przeszukamy producentów kolekcji, widzimy nasz nowo utworzony rekord:
db.producers.find()
Wynik:
{ "_id" : 1, "name" : "Bob Rock" }