ใช้ตัวดำเนินการ $elemMatch เพื่อค้นหาเอกสารที่มีออบเจกต์ในอาร์เรย์ตรงตามเงื่อนไขหลายอย่างพร้อมกัน เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:
> db.getMatchingDocumentDemo.insertOne(
{
_id : 1,
"UserDetails":[
{ "UserName":"John", "UserAge":23 }
]
}
);
{ "acknowledged" : true, "insertedId" : 1 }
> db.getMatchingDocumentDemo.insertOne(
{ _id : 2, "UserDetails":[ { "UserName":"Larry", "UserAge":24 } ] }
);
{ "acknowledged" : true, "insertedId" : 2 }
แสดงเอกสาร:
> db.getMatchingDocumentDemo.find().pretty();
คิวรี่ค้นหาเอกสารที่มี UserDetails ซึ่งมี UserAge = 24:
> db.getMatchingDocumentDemo.find({UserDetails: {$elemMatch: {UserAge: 24}}});ความแตกต่างระหว่าง $elemMatch และ dot notation:
{UserDetails: {$elemMatch: {UserAge: 24}}}- จับคู่ออบเจกต์ ตัวเดียวกัน ที่มี UserAge = 24{"UserDetails.UserAge": 24}- จับคู่ถ้ามี ออบเจกต์ใดออบเจกต์หนึ่ง มี UserAge = 24 (ผลลัพธ์เหมือนกันในตัวอย่างนี้ แต่วิธีแรกแม่นยำกว่าสำหรับเงื่อนไขหลายอย่าง)
$elemMatch จำเป็นเมื่อต้องการจับคู่หลายเงื่อนไขใน ออบเจกต์เดียวกัน ของอาร์เรย์