MongoDB แก้ไขข้อมูลด้วย method (/), (/ พร้อม operator) และ (/) การ update ใช้ แทนการแทนที่ทั้ง document ซึ่งเป็นความแตกต่างที่สำคัญ
MongoDB แก้ไขข้อมูลด้วย method (/), (/ พร้อม operator) และ (/) การ update ใช้ แทนการแทนที่ทั้ง document ซึ่งเป็นความแตกต่างที่สำคัญ
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
สำคัญ: การ update ใช้ operator ($set, $inc, $push ฯลฯ) เพื่อแก้ไข field เฉพาะ หากไม่มี operator คุณจะ แทนที่ทั้ง document ซึ่งเป็นข้อผิดพลาดที่พบบ่อย:
// ❌ 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 เป็นพื้นฐานของแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูลใด ๆ ดังนั้นการเข้าใจสิ่งเหล่านี้จึงเป็นความรู้พื้นฐานที่ใช้ในชีวิตประจำวันอย่างจำเป็น
การรู้ method (insertOne/insertMany สำหรับการสร้าง, updateOne/updateMany สำหรับการแก้ไข, deleteOne/deleteMany สำหรับการลบ) ครอบคลุมพื้นฐาน
จุดที่สำคัญที่สุดและมักถูกเข้าใจผิดบ่อย คือ การ update ของ MongoDB ใช้ update operator ($set, $inc, $push, $pull ฯลฯ) เพื่อแก้ไข field เฉพาะ และที่สำคัญ การลืม operator จะแทนที่ทั้ง document (ข้อผิดพลาดที่ขึ้นชื่อซึ่ง updateOne({...}, {age: 31}) ลบ field อื่นทั้งหมด เหลือเพียง age) ดังนั้นการเข้าใจว่าต้องใช้ $set เสมอ (และ operator อื่น ๆ) สำหรับการ update ระดับ field จึงเป็นสิ่งจำเป็นต่อความถูกต้อง
การรู้ operator ที่พบบ่อย ($set, $inc สำหรับ counter, $push/$pull/$addToSet สำหรับ array โดย array operator มีความเกี่ยวข้องเป็นพิเศษเนื่องจาก document ของ MongoDB มี array จำนวนมาก) เป็นความรู้พื้นฐานที่ใช้ในชีวิตประจำวัน
การเข้าใจ upsert ({ upsert: true } แทรกถ้าไม่พบที่ตรงกัน เป็นการ insert-or-update ของ MongoDB) มีคุณค่าสำหรับ pattern insert-or-update ที่พบบ่อย
สิ่งที่ควรสังเกตอีกอย่างคืออันตรายของ deleteMany({}) (การลบทุกอย่าง คล้ายกับอันตรายของการลืม WHERE ใน SQL)
เนื่องจากการแก้ไขข้อมูลเป็นพื้นฐาน และเนื่องจากการ update แบบ operator ของ MongoDB (พร้อมข้อผิดพลาดการแทนที่ document), array operator และ upsert เป็นวิธีที่คุณเปลี่ยนข้อมูลอย่างถูกต้อง การเข้าใจ insert/update/delete โดยเฉพาะความแตกต่างของ update operator ที่สำคัญ (หลีกเลี่ยงการแทนที่ document โดยไม่ตั้งใจ) จึงเป็นความรู้ที่จำเป็นต้องรู้สำหรับการพัฒนา MongoDB ใด ๆ ซึ่งข้อผิดพลาดเรื่อง operator โดยเฉพาะเป็นแหล่งของ bug จริงที่พบบ่อย