คิวรี่อาร์เรย์ซ้อนด้วยหลายเงื่อนไขด้วย $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 ช่วยให้สามารถจับคู่เงื่อนไขหลายอย่างภายในองค์ประกอบเดียวของอาร์เรย์ได้อย่างแม่นยำ โดยไม่ต้องกังวลว่าข้อมูลจะถูกจับคู่จากองค์ประกอบต่างกันในอาร์เรย์เดียวกัน