MongoDB modifică date cu metode de (/), (/ cu operatori), și (/). Actualizările folosesc în loc să înlocuiască întregul document — o distincție importantă.
MongoDB modifică date cu metode de (/), (/ cu operatori), și (/). Actualizările folosesc în loc să înlocuiască întregul document — o distincție importantă.
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
Important: actualizările folosesc operatori ($set, $inc, $push, etc.) pentru a modifica câmpuri specifice. Fără operator, ați înlocui întregul document — o capcană obișnuită:
// ❌ 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
);
Operațiile de inserare, actualizare și ștergere sunt modul în care aplicațiile modifică date în MongoDB, fiind fundamentale pentru orice aplicație axată pe date, deci înțelegerea lor este cunoștință esențială de zi cu zi.
Cunoașterea metodelor (insertOne/insertMany pentru creare, updateOne/updateMany pentru modificare, deleteOne/deleteMany pentru ștergere) acoperă elementele de bază.
Punctul cel mai important și frecvent greșit este că actualizările MongoDB folosesc operatori de actualizare ($set, $inc, $push, $pull, etc.) pentru a modifica câmpuri specifice — și crucial, uita operatorul înlocuiește întregul document (o capcană notorie unde updateOne({...}, {age: 31}) șterge toate celelalte câmpuri, lăsând doar age), deci înțelegerea să folosești întotdeauna $set (și alți operatori) pentru actualizări la nivel de câmp este esențială pentru corectitudine.
Cunoașterea operatorilor comuni ($set, $inc pentru contoare, $push/$pull/$addToSet pentru tablouri — operatorii pentru tablouri fiind deosebit de relevanți având în vedere documentele bogate în tablouri ale MongoDB) este cunoștință importantă de zi cu zi.
Înțelegerea upsert ({ upsert: true } — inserează dacă nu există potrivire, insert-or-update al MongoDB) este valoroasă pentru modelul comun de inserare-sau-actualizare.
De asemenea, merită menționat pericolul deleteMany({}) (ștergerea totul — similar cu pericolul WHERE-ului lipsă în SQL).
Deoarece modificarea datelor este fundamentală, și deoarece actualizările bazate pe operatori ale MongoDB (cu capcanele de înlocuire a documentului), operatorii de tablouri și upsert sunt modul în care modifici corect datele, înțelegerea inserării/actualizării/ștergerii — în special distincția critică de operator de actualizare (evitând înlocuirea accidentală a documentului) — este cunoștință esențială, trebuie să cunoști, pentru orice dezvoltare MongoDB, unde capcanele operatorului în particular sunt o sursă frecventă a bug-urilor reale.