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

MongoDB Query: อ้างอิง Element ที่ n ของ Subdocument Array ด้วย $let และ $expr

Query องค์ประกอบที่ n (Variable Index) ของ Subdocument Array ด้วย $let และ $expr

บทความนี้สาธิตการใช้ $expr ร่วมกับ $let ใน find() เพื่ออ้างอิง Element ที่ Index เฉพาะ (Variable Index) ใน Subdocument Array และทดสอบเงื่อนไข

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

> db.demo72.insertOne({
    "StudentDetails": [
        { "Name": "Chris", "Age": 21 },
        { "Name": "David", "Age": 23 },
        { "Name": "Bob", "Age": 20 }
    ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29b4ad71bf0181ecc42269") }

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

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

ผลลัพธ์: StudentDetails มี 3 องค์ประกอบ Index 0, 1, 2

ขั้นตอนที่ 3: Query ตรวจสอบ Element Index 1 (ตัวที่ 2) มี Name = "David"

$let กำหนดตัวแปรชั่วคราว fst = $arrayElemAt: ["$StudentDetails", 1] (Index 1 = ตัวที่ 2)
$expr ใช้ Expression ภายใน Query
in ทดสอบ $eq: ["$$fst.Name", "David"]

> db.demo72.find({
    $expr: {
        $let: {
            vars: { fst: { $arrayElemAt: ["$StudentDetails", 1] } },
            in: { $eq: ["$$fst.Name", "David"] }
        }
    }
})

ผลลัพธ์ที่ได้

{ "_id": ObjectId("5e29b4ad71bf0181ecc42269"), "StudentDetails": [
    { "Name": "Chris", "Age": 21 },
    { "Name": "David", "Age": 23 },
    { "Name": "Bob", "Age": 20 }
] }

สรุป: $let + $arrayElemAt + $expr ช่วยให้สามารถ Query เงื่อนไขที่ซับซ้อนเกี่ยวกับ Array Element โดย Index ได้ โดยเฉพาะเมื่อ Index เป็น Variable หรือคำนวณได้