ใช้ $[] (All Positional Operator) ร่วม $set เพื่ออัปเดต ทุก องค์ประกอบในอาร์เรย์ที่ระบุ
ตัวอย่างข้อมูลทดสอบ (ServerLogs ทั้ง 3 เป็น InActive)
> db.demo385.insertOne({"ServerLogs": [
{"status":"InActive"}, {"status":"InActive"}, {"status":"InActive"}
]})
แสดงข้อมูลก่อน
> db.demo385.find().pretty();
{
"_id" : ObjectId("5e5b6a7522064be7ab44e7f5"),
"ServerLogs" : [
{"status" : "InActive"}, {"status" : "InActive"}, {"status" : "InActive"}
]
}
คำสั่งอัปเดตทุก status เป็น Active
> db.demo385.update(
{"_id" : ObjectId("5e5b6a7522064be7ab44e7f5")},
{"$set": {"ServerLogs.$[].status": "Active"}}
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ผลลัพธ์ (ทั้ง 3 กลายเป็น Active)
> db.demo385.find().pretty();
{
"_id" : ObjectId("5e5b6a7522064be7ab44e7f5"),
"ServerLogs" : [
{"status" : "Active"}, {"status" : "Active"}, {"status" : "Active"}
]
}
ความแตกต่าง:
$(Positional) - อัปเดต องค์ประกอบแรก ที่ match query$[](All Positional) - อัปเดต ทุก องค์ประกอบในอาร์เรย์$[<identifier>](Filtered Positional) - อัปเดตเฉพาะที่ match arrayFilters