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

การอัปเดตค่าในอาร์เรย์ซ้อนเมื่อฟิลด์อื่นตรงเงื่อนไขใน MongoDB

อัปเดตค่าในอาร์เรย์โดยใช้ $elemMatch และ positional operator $

บทความนี้สาธิตวิธีการอัปเดตค่าของฟิลด์หนึ่งในออบเจกต์ภายในอาร์เรย์ โดยจับคู่ออบเจกต์เป้าหมายด้วยเงื่อนไขหลายฟิลด์ผ่าน $elemMatch และใช้ Positional Operator $ เพื่ออัปเดตเฉพาะองค์ประกองที่ตรงเงื่อนไข

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

สร้าง collection ชื่อ demo196 มีฟิลด์ details เป็นอาร์เรย์ของออบเจกต์ที่มี FirstName, LastName, Score

> db.demo196.insertOne({
    "Id": "101",
    "details": [
        { "FirstName": "Chris", "LastName": "Brown", "Score": 45 },
        { "FirstName": "David", "LastName": "Miller", "Score": 87 },
        { "FirstName": "John", "LastName": "Doe", "Score": 56 }
    ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e3af6b103d395bdc21346d7") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo196.find();

ผลลัพธ์:

{ "_id": ObjectId("5e3af6b103d395bdc21346d7"), "Id": "101", "details": [
    { "FirstName": "Chris", "LastName": "Brown", "Score": 45 },
    { "FirstName": "David", "LastName": "Miller", "Score": 87 },
    { "FirstName": "John", "LastName": "Doe", "Score": 56 }
] }

ขั้นตอนที่ 3: อัปเดต Score ของ David Miller เป็น 98

ใช้ $elemMatch ในส่วน Query เพื่อหาออบเจกต์ในอาร์เรย์ที่มี FirstName: "David" และ LastName: "Miller" พร้อมกัน แล้วใช้ $set ร่วมกับ details.$.Score (Positional Operator) เพื่ออัปเดตเฉพาะองค์ประกอบที่ตรง

> db.demo196.update(
    {"details": {"$elemMatch": {"FirstName": "David", "LastName": "Miller"}}},
    {"$set": {"details.$.Score": 98}}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

ขั้นตอนที่ 4: ตรวจสอบผลลัพธ์

> db.demo196.find();

ผลลัพธ์:

{ "_id": ObjectId("5e3af6b103d395bdc21346d7"), "Id": "101", "details": [
    { "FirstName": "Chris", "LastName": "Brown", "Score": 45 },
    { "FirstName": "David", "LastName": "Miller", "Score": 98 },
    { "FirstName": "John", "LastName": "Doe", "Score": 56 }
] }

สรุป: การรวม $elemMatch ใน Query และ Positional Operator $ ใน Update เป็นวิธีมาตรฐานในการอัปเดตองค์ประกอบเฉพาะในอาร์เรย์ที่จับคู่ด้วยเงื่อนไขหลายฟิลด์