ใช้ $elemMatch ร่วมกับ $set เพื่ออัปเดตฟิลด์ในออบเจกต์ที่อยู่ในอาร์เรย์ โดยจับคู่จากฟิลด์อื่น เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:
> db.keyValueDemo.insertOne(
{
"_id" : new ObjectId(),
"CustomerDetails" : [
{ "Name" : "Chris", "Age" :24 },
{ "Name" : "Robert", "Age" :29 },
{ "Name" : "David", "Age" :35 }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cefcf36ef71edecf6a1f6bf") }
แสดงเอกสาร:
> db.keyValueDemo.find().pretty();
คิวรี่อัปเดต Age เป็น 56 สำหรับลูกค้าที่ Name เป็น "David":
> db.keyValueDemo.update( {"CustomerDetails":{"$elemMatch":{"Name":"David"}}}, {"$set":{"CustomerDetails.$.Age":56}} ); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })ตรวจสอบเอกสารอีกครั้ง:
> db.keyValueDemo.find().pretty();คำอธิบาย:
$elemMatchจับคู่ออบเจกต์ในอาร์เรย์ CustomerDetails ที่มี Name = "David" จากนั้น$setพร้อมCustomerDetails.$.Ageจะอัปเดตเฉพาะ Age ของออบเจกต์ที่จับคู่ได้