MongoDB spreminja podatke z metodami (/), (/ z operatorji) in (/). Posodobitve uporabljajo namesto zamenjave celotnih dokumentov — to je pomembna razlika.
MongoDB spreminja podatke z metodami (/), (/ z operatorji) in (/). Posodobitve uporabljajo namesto zamenjave celotnih dokumentov — to je pomembna razlika.
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
Pomembno: posodobitve uporabljajo operatorje ($set, $inc, $push itd.) za spreminjanje specifičnih polj. Brez operatorja bi zamenjali celoten dokument — pogosta napaka:
// ❌ 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
);
Operacije vstavljanja, posodabljanja in brisanja so način, kako aplikacije spreminjajo podatke v bazi MongoDB, kar je temeljno za vsako aplikacijo, ki deluje s podatki, zato je razumevanje teh operacij bistveno znanje vsakdana.
Znanje metod (insertOne/insertMany za ustvarjanje, updateOne/updateMany za spreminjanje, deleteOne/deleteMany za brisanje) pokriva osnove.
Najbolj pomembna in pogosto napačno razumljena točka je, da MongoDB posodobitve uporabljajo operatorje za posodobitev ($set, $inc, $push, $pull itd.) za spreminjanje specifičnih polj — in ključno je, da pozaba na operator nadomesti celoten dokument (infamna napaka, kjer updateOne({...}, {age: 31}) izbriše vsa druga polja in pusti samo age), zato je razumevanje, da vedno uporabite $set (in druge operatorje) za posodobitve na nivoju polja, bistveno za pravilnost.
Znanje pogostih operatorjev ($set, $inc za števce, $push/$pull/$addToSet za nize — operatorji za nize so posebej relevantni glede na MongoDB-jeve bogate nize) je pomembno znanje vsakdana.
Razumevanje upserta ({ upsert: true } — vstavi, če ni ujemanja, MongoDB-jev vzorec vstavi-ali-posodobi) je dragoceno za pogost vzorec vstavi-ali-posodobi.
Tudi vredno je omeniti nevarnost deleteMany({}) (brisanje vsega — podobno nevarnosti chybejočega WHERE-ja v SQL-u).
Ker je spreminjanje podatkov temeljno, in ker so MongoDB-jevi posodobitve na osnovi operatorjev (s pasto zamenjave dokumenta), operatorji za nize in upsert način, kako pravilno spremenite podatke, je razumevanje vstavljanja/posodabljanja/brisanja — zlasti kritične razlike med operatorji posodobitve (izogibanje neželjeni zamenjavi dokumenta) — bistveno, mora-vedeti znanje za vsak MongoDB razvoj, pri čemer je posebej pogosta napaka s strani operatorjev pogost vir resničnih napak.