ใช้ $elemMatch สำหรับเงื่อนไขในอาร์เรย์ของออบเจกต์
เมื่อต้องการค้นหาเอกสารที่อาร์เรย์มีออบเจกต์ตรงเงื่อนไขหลายฟิลด์พร้อมกัน ใช้ $elemMatch
ไวยากรณ์
db.yourCollectionName.find({
"yourOuterFieldName": {
$elemMatch: {
"yourInnerFieldName": "yourValue"
}
}
}).pretty();
ตัวอย่าง
สร้างคอลเลกชัน objectInAnArrayDemo ที่มีฟิลด์ StudentDetails เป็นอาร์เรย์ของออบเจกต์:
> db.objectInAnArrayDemo.insertOne({
"StudentDetails": [
{"StudentName": "John", "StudentMessage": "Hi"},
{"StudentName": "Larry", "StudentMessage": "Hello"}
]
});
> db.objectInAnArrayDemo.insertOne({
"StudentDetails": [
{"StudentName": "Carol", "StudentMessage": "Hello"},
{"StudentName": "David", "StudentMessage": "Good Morning"}
]
});
ค้นหาเอกสารที่มี StudentMessage = "Good Morning" ในอาร์เรย์
> db.objectInAnArrayDemo.find({
"StudentDetails": {
$elemMatch: { "StudentMessage": "Good Morning" }
}
}).pretty();
ผลลัพธ์:
{
"_id" : ObjectId("..."),
"StudentDetails" : [
{"StudentName": "Carol", "StudentMessage": "Hello"},
{"StudentName": "David", "StudentMessage": "Good Morning"}
]
}
$elemMatch ใช้เมื่อต้อง match หลายเงื่อนไขในออบเจกต์เดียวของอาร์เรย์ เช่น {$elemMatch: {score: {$gt: 80}, subject: "Math"}}