Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

อัปเดตหลายองค์ประกอบในอาร์เรย์พร้อมกันด้วย All Positional Operator $[] ใน MongoDB

ใช้ $[] (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