MongoDB modifikuje data metodami (/), (/ s operátory) a (/). Aktualizace používají spíše než nahrazení celých dokumentů — důležitý rozdíl.
MongoDB modifikuje data metodami (/), (/ s operátory) a (/). Aktualizace používají spíše než nahrazení celých dokumentů — důležitý rozdíl.
insertOneinsertManyupdateOneupdateManydeleteOnedeleteManydb.users.insertOne({ name: "Ann", age: 30 }); // → returns the inserted _id
db.users.insertMany([{ name: "Bob" }, { name: "Carol" }]); // bulk insert (efficient)
// updateOne — filter (which doc) + update (with OPERATORS)
db.users.updateOne(
{ name: "Ann" },
{ $set: { age: 31, status: "active" } } // $set: change specific fields
);
// common update operators
{ $set: { field: value } } // set/change a field
{ $unset: { field: "" } } // remove a field
{ $inc: { count: 1 } } // increment a number
{ $push: { tags: "new" } } // add to an array
{ $pull: { tags: "old" } } // remove from an array
{ $addToSet: { tags: "x" } } // add to array only if not present
db.users.updateMany({ active: false }, { $set: { archived: true } }); // update all matching
Důležité: aktualizace používají operátory ($set, $inc, $push atd.) k modifikaci konkrétních polí. Bez operátoru byste nahradili celý dokument — běžná chyba:
// ❌ this REPLACES the whole document (loses other fields!)
db.users.updateOne({ name: "Ann" }, { age: 31 }); // Ann now has ONLY age!
// ✅ use $set to change just the field
db.users.updateOne({ name: "Ann" }, { $set: { age: 31 } });
db.users.deleteOne({ name: "Ann" }); // delete the first match
db.users.deleteMany({ active: false }); // delete all matching
db.users.deleteMany({}); // ⚠️ deletes ALL documents!
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Ann" } },
{ upsert: true } // if no match, INSERT a new document
);
Operace vložení, aktualizace a odstranění jsou způsob, jak aplikace modifikují data v MongoDB, jsou fundamentální pro každou aplikaci řízená daty, takže jejich pochopení je nezbytné.
Znalost metod (insertOne/insertMany pro vytváření, updateOne/updateMany pro modifikaci, deleteOne/deleteMany pro odstraňování) pokrývá základy.
Nejdůležitější a nejčastěji nepochopený bod je, že MongoDB aktualizace používají update operátory ($set, $inc, $push, $pull atd.) k modifikaci konkrétních polí — a zásadně, zapomenutí operátoru nahradí celý dokument (problematická chyba, kdy updateOne({...}, {age: 31}) smaže všechna ostatní pole a zůstane pouze age), proto je pochopení, že vždy použijete $set (a další operátory) pro aktualizace na úrovni polí, zásadní pro správnost.
Znalost běžných operátorů ($set, $inc pro čítače, $push/$pull/$addToSet pro pole — operátory pro pole jsou zvlášť relevantní vzhledem k MongoDB dokumentům bohatým na pole) je důležitá.
Pochopení upsert ({ upsert: true } — vložení, pokud neexistuje shoda, MongoDB insert-or-update) je cenné pro běžný vzor insert-or-update.
Stojí za poznámku také nebezpečí deleteMany({}) (smazání všeho — podobné nebezpečí chybějícího WHERE v SQL).
Keďže modifikace dat je fundamentální a keďže MongoDB aktualizace na základě operátorů (s nebezpečím nahrazení dokumentu), operátory pro pole a upsert jsou způsob, jak správně měnit data, pochopení insert/update/delete — zvláště kritický rozdíl update-operator (vyhýbání se náhodnému nahrazení dokumentu) — je nezbytné, musí být známé pro jakýkoli vývoj MongoDB, kde je operátor pitfall obzvláště časté zdroj skutečných chyb.