MongoDB Update() dokument s příkladem

\

⚡ Chytré shrnutí

MongoDB Operace s dokumenty metodou Update() upravují existující záznamy v kolekci. Metoda update() bere podmínku pro výběr dokumentů a modifikátor, například $set, pro změnu hodnot polí a volba multi aktualizuje několik odpovídajících dokumentů najednou.

  • ✏️ Metoda update(): Příkaz update() mění pole v dokumentech, která splňují zadanou podmínku.
  • 🎯 Podmínka shody: První argument vybírá, které dokumenty se mají aktualizovat, například {Employeeid:1}.
  • 🔧 $set Operator: Operátor $set přiřadí novou hodnotu poli, aniž by nahradil celý dokument.
  • ???? Aktualizovat mnoho: Volba multi, neboli updateMany(), upravuje všechny dokumenty, které se shodují, a ne pouze jeden.
  • Nahoru: Možnost upsert vloží nový dokument, pokud žádný existující dokument neodpovídá podmínce.
  • 🔄 Moderní metody: Funkce updateOne(), updateMany() a replaceOne() jsou aktuální náhrady za zastaralou funkci update().

MongoDB Aktualizovat() dokument

Základní aktualizace dokumentů

MongoDB poskytuje příkaz update() pro aktualizaci dokumentů kolekce. Chcete-li aktualizovat pouze dokumenty, které chcete aktualizovat, můžete do prohlášení o aktualizaci přidat kritéria, aby byly aktualizovány pouze vybrané dokumenty.

Základní parametry v příkazu jsou podmínkou, pro kterou je třeba dokument aktualizovat, a další je úprava, kterou je potřeba provést.

Následující příklad ukazuje, jak to lze provést.

Krok 1) Zadejte příkaz update

Krok 2) Vyberte podmínku, kterou chcete použít k rozhodnutí, který dokument je třeba aktualizovat. V našem příkladu chceme aktualizovat dokument, který má id zaměstnance 22.

Krok 3) K úpravě názvu pole použijte příkaz set

Krok 4) Vyberte název pole, který chcete upravit, a zadejte novou hodnotu.

db.Employee.update(
{"Employeeid" : 1},
{$set: { "EmployeeName" : "NewMartin"}});

Pokud je příkaz úspěšně proveden, zobrazí se následující výstup

Výstup:

Základní aktualizace dokumentů

Výstup jasně ukazuje, že jeden záznam odpovídal podmínce, a proto byla upravena hodnota příslušného pole.

MongoDB Aktualizace Operatorů

Operátor $set je nejběžnějším způsobem, jak změnit pole, ale MongoDB nabízí několik aktualizačních operátorů pro různé potřeby. Umístíte je do druhého argumentu funkce update() vedle nebo místo operátoru $set:

  • $set: Nastaví hodnotu pole a vytvoří pole, pokud neexistuje.
  • $unset: Úplně odstraní pole z dokumentu.
  • $inc: Zvětší nebo zmenší číselné pole o zadanou hodnotu.
  • $mul: Vynásobí hodnotu číselného pole.
  • $přejmenovat: Přejmenuje pole na nový název.
  • $push: Přidá hodnotu do pole pole.
  • $pull: Odstraní odpovídající hodnoty z pole pole.

Každý operátor cílí pouze na pole, která pojmenujete, a zbytek dokumentu zůstává beze změny. Můžete kombinovat několik operátorů v jednom volání update() a upravit tak více polí najednou, což zajistí přesnost aktualizací a zabrání přepsání dat, která chcete zachovat.

Aktualizace více hodnot

Aby bylo zajištěno, že se více/hromadné dokumenty aktualizují současně MongoDB musíte použít možnost více, protože jinak se ve výchozím nastavení mění vždy pouze jeden dokument.

Následující příklad ukazuje, jak aktualizovat mnoho dokumentů.

V tomto příkladu nejprve najdeme dokument, který má id zaměstnance jako „1“ a změníme jméno zaměstnance z „Martin“ na „NewMartin“

Krok 1) Zadejte příkaz update

Krok 2) Vyberte podmínku, kterou chcete použít k rozhodnutí, který dokument je třeba aktualizovat. V našem příkladu chceme, aby byl aktualizován dokument, který má id zaměstnance „1“.

Krok 3) Vyberte, které názvy polí chcete upravit, a zadejte jejich novou hodnotu.

db.Employee.update
(
	{
		Employeeid : 1
	},
	{
		$set :
		{
			"EmployeeName" : "NewMartin",
			"Employeeid" : 22
		}
	}
)

Pokud je příkaz úspěšně proveden a pokud spustíte "nalézt" příkaz k vyhledání dokumentu s ID zaměstnance jako 22, uvidíte následující výstup

Výstup:

Aktualizace více hodnot

Výstup jasně ukazuje, že jeden záznam odpovídal podmínce, a proto byla upravena hodnota příslušného pole.

Jak uploadovat dokument v MongoDB

Upsert je kombinací aktualizace a insertu. Když ho povolíte, MongoDB aktualizuje dokument, který splňuje podmínku, nebo vloží nový dokument, pokud není nalezena žádná shoda. To je užitečné, když si nejste jisti, zda záznam již existuje.

Chcete-li provést upsert, přidejte volbu upsert nastavenou na true jako třetí argument funkce update():

db.Employee.update(
  {Employeeid: 5},
  {$set: {EmployeeName: "Sofia"}},
  {upsert: true}
)

Zde se děje:

  • Pokud existuje dokument s EmployeeID 5, MongoDB aktualizuje pole EmployeeName.
  • Pokud takový dokument neexistuje, MongoDB vloží nový dokument s Employeeid 5 a EmployeeName “Sofina".

Upserty jsou užitečné pro čítače, nastavení a jakýkoli pracovní postup, kde chcete vytvořit záznam při prvním použití a poté jej aktualizovat. V moderním MongoDBStejné chování je k dispozici prostřednictvím funkcí updateOne() a updateMany() zadáním parametru {upsert: true} v možnostech. S touto podmínkou buďte opatrní, protože široký filtr v kombinaci s funkcí upsert může vytvořit neočekávané dokumenty.

updateOne() vs. updateMany() vs. replaceOne()

Metoda update() je nyní starším příkazem. Moderní MongoDB Ovladače rozdělují jeho chování do tří přehlednějších metod. Níže uvedená tabulka je porovnává:

Metoda Co to dělá Dotčené dokumenty
updateOne() Použije operátory aktualizace na první odpovídající dokument. Jedna
updateMany() Aplikuje operátory aktualizace na každý odpovídající dokument. Mnoho
nahraditJeden() Nahradí celý první odpovídající dokument novým. Jedna

Pro jednu cílenou změnu použijte updateOne(), pro updateMany() místo staré volby multi a replaceOne() pokud chcete vyměnit celý dokument, nikoli pouze pole pro úpravy. Tyto metody vracejí jasný výsledek ukazující, kolik dokumentů se shodovalo a kolik jich bylo upraveno, což je činí bezpečnějšími a snadněji laditelnými než update().

Nejčastější dotazy

Bez operátoru aktualizace, jako je $set, MongoDB nahradí celý odpovídající dokument zadaným objektem a smaže všechna pole, která nejsou zahrnuta. Pro změnu konkrétních polí vždy použijte $set, zatímco keeping zbytek neporušený.

Ano. Pokud v odpovídajícím dokumentu chybí pole uvedené v $set, MongoDB Přičte ho s danou hodnotou. Díky tomu je $set užitečný jak pro aktualizaci stávajících polí, tak pro přidávání nových.

Použijte findOneAndUpdate() s volbou returnDocument nastavenou na 'after'. Změna se aplikuje a upravený dokument se vrátí v jedné atomické operaci, což je užitečné, když potřebujete nové hodnoty okamžitě.

Umělá inteligence dokáže proměnit obyčejný požadavek v příkaz typu update nebo updateMany se správnou podmínkou a operátorem, jako je $set nebo $inc, a vysvětlit každou část, aby se začátečníci vyhnuli chybám.

Ano. Umělá inteligence dokáže označit aktualizaci, která vynechává $set a nahradí celé dokumenty, upozornit, když filtr odpovídá všemu, a navrhnout testování na kopii před spuštěním v produkčním prostředí.

Shrňte tento příspěvek takto: