ใช้ update() พร้อม $set และระบุ _id
การอัปเดตเอกสารใน MongoDB ควรทำโดยระบุ _id เพื่อความแม่นยำ และใช้ operator $set เพื่ออัปเดตเฉพาะฟิลด์ที่ต้องการ
ตัวอย่างข้อมูล
> db.demo458.insertOne({ _id: 101, "Name": "David" });
> db.demo458.insertOne({ _id: 102, "Name": "Chris" });
> db.demo458.insertOne({ _id: 103, "Name": "Bob" });
Query อัปเดตชื่อของ _id: 102
> db.demo458.update({ _id: 102 }, { $set: { "Name": "David Miller" } });
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
ผลลัพธ์
{ "_id": 101, "Name": "David" }
{ "_id": 102, "Name": "David Miller" }
{ "_id": 103, "Name": "Bob" }
แนวทางปฏิบัติที่ดี (Best Practices)
- ใช้ _id เสมอ - ป้องกันอัปเดตเอกสารผิด (หากมีชื่อซ้ำ)
- ใช้ $set - อัปเดตเฉพาะฟิลด์ที่ระบุ ไม่ทับฟิลด์อื่น
- ใช้ updateOne()/updateMany() - แทน update() ใน MongoDB 3.2+
- ตรวจสอบ nModified - ยืนยันว่ามีการเปลี่ยนแปลงจริง
รูปแบบใหม่ (MongoDB 3.2+)
// อัปเดตหนึ่งเอกสาร
db.demo458.updateOne({ _id: 102 }, { $set: { "Name": "David Miller" } });
// อัปเดตหลายเอกสาร
db.demo458.updateMany({ "Name": "David" }, { $set: { "Name": "David Miller" } });
Operator อัปเดตอื่นๆ
$inc- เพิ่ม/ลดค่าตัวเลข$unset- ลบฟิลด์$rename- เปลี่ยนชื่อฟิลด์$setOnInsert- ตั้งค่าเฉพาะตอน upsert