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

การคิวรี่อาร์เรย์ซ้อนด้วยเงื่อนไขหลายเงื่อนไขใน MongoDB โดยใช้ $elemMatch

คิวรี่อาร์เรย์ซ้อนด้วยหลายเงื่อนไขด้วย $elemMatch

บทความนี้สาธิตการใช้งานออปเจอเตอร์ $elemMatch ใน MongoDB เพื่อค้นหาเอกสารที่มีอาร์เรย์ซ้อน (nested array) ตรงตามเงื่อนไขหลายเงื่อนไขพร้อมกัน

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

สร้าง collection ชื่อ demo203 ซึ่งมีฟิลด์ details1 เป็นอาร์เรย์ของออบเจกต์ ที่แต่ละออบเจกต์มีฟิลด์ technology เป็นอาร์เรย์อีกทีหนึ่ง (nested array)

> db.demo203.insertOne({
    "_id": "101",
    "Name": "Chris",
    "details1": [
        {
            "empName": "David",
            "salary": "50000",
            "technology": ["MySQL", "MongoDB"]
        },
        {
            "empName": "Carol",
            "salary": "70000",
            "technology": ["Java", "Spring"]
        }
    ]
});
{ "acknowledged": true, "insertedId": "101" }

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

> db.demo203.find();

ผลลัพธ์:

{ "_id": "101", "Name": "Chris", "details1": [
    { "empName": "David", "salary": "50000", "technology": ["MySQL", "MongoDB"] },
    { "empName": "Carol", "salary": "70000", "technology": ["Java", "Spring"] }
] }

ขั้นตอนที่ 3: คิวรี่ด้วย $elemMatch หลายเงื่อนไข

ใช้ $elemMatch เพื่อระบุเงื่อนไขหลายอย่างในออบเจกต์เดียวกันภายในอาร์เรย์: ต้องมี technology เป็น "MySQL" และ empName เป็น "David" พร้อมกัน

> db.demo203.find({
    details1: { $elemMatch: { "technology": "MySQL", "empName": "David" } }
}).pretty()

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

{ "_id": "101", "Name": "Chris", "details1": [
    { "empName": "David", "salary": "50000", "technology": ["MySQL", "MongoDB"] },
    { "empName": "Carol", "salary": "70000", "technology": ["Java", "Spring"] }
] }

สรุป: $elemMatch ช่วยให้สามารถจับคู่เงื่อนไขหลายอย่างภายในองค์ประกอบเดียวของอาร์เรย์ได้อย่างแม่นยำ โดยไม่ต้องกังวลว่าข้อมูลจะถูกจับคู่จากองค์ประกอบต่างกันในอาร์เรย์เดียวกัน