Použijte update()
metoda nebo save()
způsob aktualizace dokumentů v MongoDB.
V MongoDB obě update()
metoda a save()
metodu lze použít k aktualizaci dokumentu.
update()
metoda aktualizuje hodnoty v existujícím dokumentu nebo dokumentech, zatímco save()
metoda nahradí dokument dokumentem předaným jako parametr.
Nicméně update()
metoda může také nahradit celý dokument, v závislosti na parametru, který je předán.
Položka update()
Metoda
Zde je příklad update()
metoda.
Nejprve vyberte záznam, který chcete aktualizovat:
db.musicians.find({ _id: 6 }).pretty()
Výsledek:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff ve skutečnosti dělá mnohem víc než jen zpívá. Přidejme tedy další nástroje. Použijeme $set
operátor pro aktualizaci jednoho pole.
db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Výsledek:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Nyní, když uděláme další dotaz, uvidíme, že dokument byl aktualizován podle specifikace:
db.musicians.find({ _id: 6 }).pretty()
Výsledek:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Některé další možnosti:
- Pokud pole neexistuje,
$set
operátor přidá nové pole se zadanou hodnotou za předpokladu, že nové pole neporušuje omezení typu. - Můžete také použít
{ upsert: true }
k vytvoření nového dokumentu, když dotazu neodpovídá žádný dokument. - Můžete použít
{ multi: true }
aktualizovat více dokumentů, které splňují kritéria dotazu. Ve výchozím nastavení je tato možnost nastavena nafalse
, takže pokud jej nenastavíte natrue
, aktualizuje se pouze jeden dokument .
save()
Metoda
save()
metoda je kříženec mezi update()
a insert()
. Když použijete save()
Pokud dokument existuje, bude aktualizován. Pokud neexistuje, bude vytvořen.
Pokud nezadáte _id
pole MongoDB vytvoří dokument s _id
který obsahuje ObjectId
hodnotu (jako insert()
).
Pokud zadáte _id
pole, provede aktualizaci pomocí { upsert: true }
, což znamená, že pokud dotazu neodpovídá žádný dokument, vytvoří nový dokument.
V současné době nemáme žádné dokumenty v našich
producentech
sbírka. Vytvořme jej pomocí save()
metoda:
db.producers.save({ _id: 1, name: "Bob Rock" })
Výsledek:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Nyní, když hledáme producenty kolekce, vidíme náš nově vytvořený záznam:
db.producers.find()
Výsledek:
{ "_id" : 1, "name" : "Bob Rock" }