Το MongoDB τροποποιεί δεδομένα με μεθόδους (/), (/ με operators), και (/). Οι ενημερώσεις χρησιμοποιούν αντί να αντικαθιστούν ολόκληρα έγγραφα — μια σημαντική διάκριση.
Το MongoDB τροποποιεί δεδομένα με μεθόδους (/), (/ με operators), και (/). Οι ενημερώσεις χρησιμοποιούν αντί να αντικαθιστούν ολόκληρα έγγραφα — μια σημαντική διάκριση.
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
Σημαντικό: οι ενημερώσεις χρησιμοποιούν operators ($set, $inc, $push, κτλ.) για να τροποποιήσουν συγκεκριμένα πεδία. Χωρίς operator, θα αντικαταστήσετε ολόκληρο το έγγραφο — μια συνηθισμένη παγίδα:
// ❌ 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
);
Οι λειτουργίες insert, update και delete είναι ο τρόπος που οι εφαρμογές τροποποιούν δεδομένα στο MongoDB, θεμελιώδεις για οποιαδήποτε εφαρμογή που βασίζεται σε δεδομένα, επομένως η κατανόησή τους είναι ουσιώδης καθημερινή γνώση.
Η γνώση των μεθόδων (insertOne/insertMany για δημιουργία, updateOne/updateMany για τροποποίηση, deleteOne/deleteMany για κατάργηση) καλύπτει τα βασικά.
Το πιο σημαντικό και συχνά παρανοούμενο σημείο είναι ότι οι ενημερώσεις MongoDB χρησιμοποιούν update operators ($set, $inc, $push, $pull, κτλ.) για να τροποποιήσουν συγκεκριμένα πεδία — και κρίσιμα, η παράβλεψη του operator αντικαθιστά ολόκληρο το έγγραφο (μια臭 παγίδα όπου updateOne({...}, {age: 31}) σβήνει όλα τα άλλα πεδία, αφήνοντας μόνο age), επομένως η κατανόηση ότι πρέπει πάντα να χρησιμοποιείτε $set (και τους άλλους operators) για ενημερώσεις σε επίπεδο πεδίου είναι ουσιώδης για ορθότητα.
Η γνώση των συνηθισμένων operators ($set, $inc για μετρητές, $push/$pull/$addToSet για πίνακες — οι operators πινάκων είναι ιδιαίτερα σχετικοί δεδομένων των εγγράφων MongoDB που είναι πλούσια σε πίνακες) είναι σημαντική καθημερινή γνώση.
Η κατανόηση του upsert ({ upsert: true } — εισαγωγή αν δεν υπάρχει αντιστοίχιση, insert-or-update του MongoDB) είναι πολύτιμη για το συνηθισμένο insert-or-update pattern.
Αξίζει επίσης να σημειωθεί ο κίνδυνος του deleteMany({}) (διαγραφή όλων — παρόμοια με τον κίνδυνο του missing-WHERE στο SQL).
Επειδή η τροποποίηση δεδομένων είναι θεμελιώδης, και επειδή οι ενημερώσεις MongoDB που βασίζονται σε operators (με την παγίδα αντικατάστασης εγγράφων), οι array operators, και το upsert είναι ο τρόπος με τον οποίο σωστά αλλάζετε δεδομένα, η κατανόηση insert/update/delete — ιδιαίτερα η κρίσιμη διάκριση update-operator (αποφυγή ακούσιας αντικατάστασης εγγράφων) — είναι ουσιώδης, must-know γνώση για οποιαδήποτε ανάπτυξη MongoDB, όπου η παγίδα operator ειδικά είναι μια συχνή πηγή πραγματικών σφαλμάτων.