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

Update ฟิลด์ใน Array Element ตำแหน่งที่กำหนด (Exact Position) ใน MongoDB

ใช้ Positional Operator $ ร่วม Index ของ Array เพื่ออัปเดต Element ตำแหน่งที่แน่นอน

ไวยากรณ์


{$set: {"yourArrayDocumentName.$.yourNestedArrayDocument.yourIndex": "yourValue"}}

สร้างข้อมูลตัวอย่าง (Nested Array)


> db.updateExactField.insertOne({
    "ActorId": 1,
    "ActorDetails": [
        {"ActorName": "Johnny Depp", "MovieList": ["The Tourist", "Public Enemy"]},
        {"ActorName": "Chris Evans", "MovieList": ["Captain America", "Avengers"]}
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6d7f63f2db199c1278e7f1") }

แสดงเอกสาร


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

Case 1: Update Index 2 (ตำแหน่งที่ 3) ของ MovieList ของ Chris Evans


> db.updateExactField.update(
    {"ActorDetails.ActorName": "Chris Evans"},
    {$set: {"ActorDetails.$.MovieList.2": "Avengers:Infinity War"}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ผลลัพธ์: เพิ่ม "Avengers:Infinity War" เข้าไปที่ Index 2


"MovieList" : ["Captain America", "Avengers", "Avengers:Infinity War"]

Case 2: Update Index 1 (ตำแหน่งที่ 2) ให้เป็น "Gifted"


> db.updateExactField.update(
    {"ActorDetails.ActorName": "Chris Evans"},
    {$set: {"ActorDetails.$.MovieList.1": "Gifted"}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ผลลัพธ์: แทนที่ Index 1 เดิม (Avengers) ด้วย "Gifted"


"MovieList" : ["Captain America", "Gifted", "Avengers:Infinity War"]

สรุป: ใช้ ArrayName.Index ใน $set เพื่อ Target ตำแหน่งที่แน่นอนใน Array (0-based Index)