MongoDB Update() dokumentum példával

\

⚡ Okos összefoglaló

MongoDB Az Update() metódus dokumentumműveletek egy gyűjtemény meglévő rekordjait módosítják. Az update() metódus egy feltételt fogad el a dokumentumok kiválasztásához, és egy módosítót, például a $set-et a mezőértékek módosításához, a multi opció pedig több egyező dokumentumot frissít egyszerre.

  • ✏️ update() metódus: Az update() parancs módosítja a dokumentumokban azokat a mezőket, amelyek megfelelnek egy adott feltételnek.
  • 🎯 Mérkőzés feltétele: Az első argumentum kiválasztja, hogy mely dokumentumokat kell frissíteni, például {Employeeid:1}.
  • 🔧 $set Operator: A $set operátor új értéket rendel egy mezőhöz anélkül, hogy a teljes dokumentumot lecserélné.
  • ???? Sok frissítés: A multi opció, vagyis az updateMany() függvény, minden egyező dokumentumot módosít, nem csak egyet.
  • Feltöltés: Az upsert opció új dokumentumot szúr be, ha egyetlen meglévő dokumentum sem felel meg a feltételnek.
  • 🔄 Modern módszerek: Az updateOne(), updateMany() és replaceOne() a jelenlegi helyettesítői az elavult update() függvényeknek.

MongoDB Update() dokumentum

Alapvető dokumentumfrissítések

MongoDB az update() parancsot biztosítja egy gyűjtemény dokumentumainak frissítéséhez. Ha csak a frissíteni kívánt dokumentumokat szeretné frissíteni, a frissítési utasításhoz feltételeket adhat hozzá, így csak a kiválasztott dokumentumok kerülnek frissítésre.

A parancs alapvető paraméterei egy feltétel, amelyhez a dokumentumot frissíteni kell, a következő pedig az elvégzendő módosítás.

A következő példa bemutatja, hogyan lehet ezt megtenni.

Step 1) Adja ki a frissítési parancsot

Step 2) Válassza ki a feltételt, amellyel eldöntheti, hogy melyik dokumentumot kell frissíteni. Példánkban frissíteni szeretnénk a 22-es alkalmazotti azonosítóval rendelkező dokumentumot.

Step 3) A set paranccsal módosítsa a mező nevét

Step 4) Válassza ki a módosítani kívánt mező nevét, és ennek megfelelően adja meg az új értéket.

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

Ha a parancs sikeresen végrehajtásra került, a következő kimenet jelenik meg

output:

Alapvető dokumentumfrissítések

A kimenet egyértelműen mutatja, hogy egy rekord megfelelt a feltételnek, és így a vonatkozó mezőérték módosult.

MongoDB Frissítések Operatorzok

A $set operátor a leggyakoribb módja egy mező módosításának, de MongoDB Számos frissítési operátort kínál a különböző igényekhez. Ezeket az update() második argumentumában helyezzük el a $set mellett vagy helyett:

  • $set: Beállítja egy mező értékét, és létrehozza a mezőt, ha az nem létezik.
  • $unset: Teljesen eltávolít egy mezőt a dokumentumból.
  • $inc: Egy adott értékkel növeli vagy csökkenti a numerikus mező tartalmát.
  • $mul: Megszorozza egy numerikus mező értékét.
  • $átnevezés: Átnevezi a mezőt egy új névre.
  • $push: Értéket ad hozzá egy tömbmezőhöz.
  • $pull: Eltávolítja az egyező értékeket egy tömbmezőből.

Minden operátor csak a megnevezett mezőket célozza meg, a dokumentum többi részét változatlanul hagyva. Több operátort kombinálhatsz egyetlen update() hívásban, hogy egyszerre több mezőt módosíts, ami pontos frissítéseket biztosít, és elkerüli a megtartani kívánt adatok felülírását.

Több érték frissítése

Annak biztosítása érdekében, hogy több/tömeges dokumentum egyidejűleg frissüljön MongoDB a több opciót kell használnia, mert egyébként alapértelmezés szerint egyszerre csak egy dokumentum módosul.

A következő példa bemutatja, hogyan frissíthet sok dokumentumot.

Ebben a példában először megkeressük azt a dokumentumot, amelynek az alkalmazotti azonosítója „1”, és az alkalmazott nevét „Martin”-ról „NewMartin”-ra módosítjuk.

Step 1) Adja ki a frissítési parancsot

Step 2) Válassza ki a feltételt, amellyel eldöntheti, hogy melyik dokumentumot kell frissíteni. Példánkban azt a dokumentumot szeretnénk frissíteni, amelynek alkalmazotti azonosítója „1”.

Step 3) Válassza ki a módosítani kívánt mezőneveket, és ennek megfelelően adja meg az új értéküket.

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

Ha a parancs sikeresen végrehajtásra került, és ha futtatja a "megtalálja" paranccsal megkeresheti a 22-es alkalmazotti azonosítójú dokumentumot, akkor a következő kimenet jelenik meg

output:

Több érték frissítése

A kimenet egyértelműen mutatja, hogy egy rekord megfelelt a feltételnek, és így a vonatkozó mezőérték módosult.

Hogyan lehet egy dokumentumot Upsert-elni a MongoDB

Az upsert az update és az insert kombinációja. Amikor engedélyezed, MongoDB frissíti a feltételnek megfelelő dokumentumot, vagy új dokumentumot szúr be, ha nem talál egyezést. Ez akkor hasznos, ha nem biztos benne, hogy létezik-e már egy rekord.

Upsert végrehajtásához add hozzá az upsert opciót igaz értékre állítva az update() harmadik argumentumaként:

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

Itt van, mi történik:

  • Ha létezik egy 5-ös Employeeid azonosítójú dokumentum, MongoDB frissíti az AlkalmazottNév mezőt.
  • Ha ilyen dokumentum nem létezik, MongoDB beszúr egy új dokumentumot, amelynek alkalmazotti azonosítója 5, alkalmazotti neve pedig „Sofia".

Az Upsertek hasznosak számlálóknál, beállításoknál és minden olyan munkafolyamatnál, ahol az első használatkor létre szeretne hozni egy rekordot, majd később frissíteni szeretné azt. Modern MongoDBUgyanez a viselkedés érhető el az updateOne() és updateMany() függvénnyel is, ha az {upsert: true} paramétert adjuk meg az opciókban. Legyen óvatos a feltétellel, mert egy széles szűrő és az upsert kombinálása váratlan dokumentumokat hozhat létre.

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

Az update() metódus mostantól egy hagyományos parancs. Modern MongoDB A sofőrök három egyértelműbb módszerre osztják a viselkedését. Az alábbi táblázat összehasonlítja ezeket:

Módszer Mit csinál Érintett dokumentumok
updateOne() Frissítési operátorokat alkalmaz az első egyező dokumentumra egy
updateMany() Frissítési operátorokat alkalmaz minden egyező dokumentumra Sok
replaceOne() A teljes első egyező dokumentumot egy újra cseréli egy

Használd az updateOne() metódust egyetlen célzott módosításhoz, az updateMany() metódust a régi többszörös opció helyett, és a replaceOne() metódust, ha egy egész dokumentumot szeretnél cserélni a mezők szerkesztése helyett. Ezek a metódusok egyértelmű eredményt adnak vissza, amely megmutatja, hogy hány dokumentum egyezett meg és hány módosult, ami biztonságosabbá és könnyebben hibakereshetővé teszi őket, mint az update() metódus.

GYIK

Egy frissítési operátor, például a $set nélkül MongoDB a teljes egyező dokumentumot lecseréli a megadott objektummal, törli a nem szereplő mezőket. Mindig a $set paramétert használd bizonyos mezők módosításához, miközben a keeping a többi ép.

Igen. Ha a $set paraméterben megnevezett mező hiányzik a megfelelő dokumentumból, MongoDB hozzáadja a megadott értékkel. Ezáltal a $set hasznos mind a meglévő mezők frissítéséhez, mind újak hozzáadásához.

Használd a findOneAndUpdate() függvényt a returnDocument opció „after” értékével. Ez egyetlen atomi művelettel alkalmazza a módosítást és visszaadja a módosított dokumentumot, ami akkor hasznos, ha azonnal szükséged van az új értékekre.

A mesterséges intelligencia képes egy egyszerű kérést update vagy updateMany parancssá alakítani a megfelelő feltétellel és operátorral, például a $set vagy az $inc, és elmagyarázni az egyes részeket, hogy a kezdők elkerüljék a hibákat.

Igen. A mesterséges intelligencia képes megjelölni egy olyan frissítést, amelyből hiányzik a $set, és amely teljes dokumentumokat cserélne le, figyelmeztetni, ha egy szűrő mindenre illeszkedik, és javasolni a másolaton való tesztelést az éles környezetben való futtatás előtt.

Foglald össze ezt a bejegyzést a következőképpen: