ใช้ $elemMatch สำหรับ Query ออบเจ็กต์ในอาร์เรย์
เมื่อต้องการค้นหาเอกสารที่อาร์เรย์มีออบเจ็กต์ตรงตามเงื่อนไขหลายฟิลด์พร้อมกัน ให้ใช้ $elemMatch ซึ่งทำงานร่วมกับ Multikey Index ได้อย่างมีประสิทธิภาพ
ตัวอย่างข้อมูล
> db.demo444.insertOne({ "Information": [{ id: 1, Name: "Chris" }] });
> db.demo444.insertOne({ "Information": [{ id: 2, Name: "David" }] });
> db.demo444.insertOne({ "Information": [{ id: 3, Name: "Bob" }] });
Query ด้วย $elemMatch
> db.demo444.find({
"Information": {
$elemMatch: { id: 2, Name: "David" }
}
});
ผลลัพธ์
{ "_id": ObjectId(...), "Information": [{ "id": 2, "Name": "David" }] }
ความแตกต่างระหว่าง $elemMatch และ Dot Notation ธรรมดา
| Query | ความหมาย |
|---|---|
| { "Information.id": 2, "Information.Name": "David" } | หาเอกสารที่มี id=2 และ Name="David" ในอิลิเมนต์ต่างกันได้ |
| { "Information": { $elemMatch: { id: 2, Name: "David" } } } | หาเอกสารที่มี อิลิเมนต์เดียวกัน ที่ id=2 และ Name="David" พร้อมกัน |
Multikey Index
MongoDB สร้าง Multikey Index อัตโนมัติเมื่อสร้าง index บนฟิลด์ที่เป็นอาร์เรย์ ทำให้ $elemMatch ใช้ index ได้อย่างมีประสิทธิภาพ
// สร้าง index เพื่อประสิทธิภาพ
db.demo444.createIndex({ "Information.id": 1, "Information.Name": 1 });