ใช้ $set พร้อม dot notation เพื่ออัปเดตฟิลด์ในออบเจ็กต์ลูก (child object/embedded document) สร้างคอลเลกชันตัวอย่าง:
> db.demo21.insertOne({"StudentId":"STU-101","StudentDetails":{"StudentName":"Chris","StudentAge":21}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14be8922d07d3b95082e6f") }
แสดงข้อมูล:
> db.demo21.find().pretty();
อัปเดต StudentName จาก "Chris" เป็น "Robert":
> db.demo21.update({"StudentId":'STU-101'},{$set:{'StudentDetails.StudentName':'Robert'}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ตรวจสอบผลลัพธ์:
> db.demo21.find().pretty();
ผลลัพธ์:
{ "_id" : ObjectId("5e14be8922d07d3b95082e6f"), "StudentId" : "STU-101", "StudentDetails" : { "StudentName" : "Robert", "StudentAge" : 21 } }
จุดสำคัญ
StudentDetails.StudentNameใช้ dot notation เข้าถึงฟิลด์ใน embedded document$setอัปเดตเฉพาะฟิลด์ที่ระบุ ฟิลด์อื่น (เช่น StudentAge) คงค่าเดิม- หากไม่ใช้ $set จะทำการ replace ทั้ง embedded document
- MongoDB ใหม่แนะนำให้ใช้
updateOne()แทนupdate()