MongoDB mengubah data dengan kaedah (/), (/ dengan operator), dan (/). Kemas kini menggunakan dan bukannya menggantikan keseluruhan dokumen — satu perbezaan yang penting.
MongoDB mengubah data dengan kaedah (/), (/ dengan operator), dan (/). Kemas kini menggunakan dan bukannya menggantikan keseluruhan dokumen — satu perbezaan yang penting.
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
Penting: kemas kini menggunakan operator ($set, $inc, $push, dll.) untuk mengubah suai medan tertentu. Tanpa operator, anda akan menggantikan keseluruhan dokumen — perangkap biasa:
// ❌ 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
);
Operasi insert, update, dan delete ialah cara aplikasi mengubah data dalam MongoDB, asas kepada mana-mana aplikasi yang dipacu data, jadi memahaminya ialah pengetahuan harian yang penting.
Mengetahui kaedahnya (insertOne/insertMany untuk mencipta, updateOne/updateMany untuk mengubah suai, deleteOne/deleteMany untuk membuang) merangkumi asasnya.
Perkara yang paling penting dan paling kerap disalahertikan ialah bahawa kemas kini MongoDB menggunakan operator kemas kini ($set, $inc, $push, $pull, dll.) untuk mengubah suai medan tertentu — dan yang kritikalnya, terlupa operator akan menggantikan keseluruhan dokumen (perangkap terkenal di mana updateOne({...}, {age: 31}) memadam semua medan lain, hanya meninggalkan age), jadi memahami untuk sentiasa menggunakan $set (dan operator lain) untuk kemas kini peringkat medan adalah penting untuk ketepatan.
Mengetahui operator biasa ($set, $inc untuk pembilang, $push/$pull/$addToSet untuk tatasusunan — operator tatasusunan terutamanya relevan memandangkan dokumen MongoDB yang kaya dengan tatasusunan) ialah pengetahuan harian yang penting.
Memahami upsert ({ upsert: true } — masukkan jika tiada padanan wujud, insert-atau-update MongoDB) berharga untuk corak insert-atau-update yang biasa.
Juga patut diberi perhatian ialah bahaya deleteMany({}) (memadam segala-galanya — serupa dengan bahaya WHERE yang tertinggal dalam SQL).
Memandangkan mengubah data adalah asas, dan memandangkan kemas kini berasaskan operator MongoDB (dengan perangkap penggantian dokumen), operator tatasusunan, dan upsert ialah cara anda mengubah data dengan betul, memahami insert/update/delete — terutamanya perbezaan operator-kemas-kini yang kritikal (mengelakkan penggantian dokumen secara tidak sengaja) — ialah pengetahuan penting yang wajib diketahui untuk sebarang pembangunan MongoDB, di mana perangkap operator khususnya ialah punca pepijat sebenar yang kerap.