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

Update ออบเจ็กต์ใน Nested Array ของ MongoDB (Nested Updating)

เพื่ออัปเดตออบเจ็กต์ภายใน Array ต่อยอด (Nested Array) ใช้เมธอด update() ร่วมกับ Positional Operator $ และ $inc

สร้างคอลเล็กชันพร้อม Nested Array


> db.updateObjects.insertOne({
    "CustomerId": 1,
    "CustomerName": "Larry",
    "TotalItems": 100,
    "ItemDetails": [
        {"NameOfItem": "Item_1", "Amount": 450},
        {"NameOfItem": "Item_2", "Amount": 500},
        {"NameOfItem": "Item_3", "Amount": 200}
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6d688b0c3d5054b766a769") }

แสดงเอกสาร


> db.updateObjects.find().pretty();

Increment Amount ของ Item_3 เพิ่ม 130 (จาก 200 เป็น 330)


> db.updateObjects.update(
    {"CustomerId": 1, "ItemDetails.NameOfItem": "Item_3"},
    {$inc: {"ItemDetails.$.Amount": 130}},
    false, true
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

$ (Positional Operator) อ้างอิงถึงตำแหน่งของ Element ใน Array ที่ Match เงื่อนไข ItemDetails.NameOfItem: "Item_3"

ตรวจสอบผลลัพธ์


> db.updateObjects.find().pretty();

{
    "CustomerId" : 1,
    "CustomerName" : "Larry",
    "TotalItems" : 100,
    "ItemDetails" : [
        {"NameOfItem" : "Item_1", "Amount" : 450},
        {"NameOfItem" : "Item_2", "Amount" : 500},
        {"NameOfItem" : "Item_3", "Amount" : 330}   // เพิ่มขึ้น 130
    ]
}

อัปเดตสำเร็จ: Amount ของ Item_3 จาก 200 กลายเป็น 330