MongoDB รองรับการค้นหาข้อมูลในอาร์เรย์ของออบเจ็กต์ (Array of Objects) โดยใช้ Dot Notation ซึ่งจะค้นหาในทุกองค์ประกอบของอาร์เรย์โดยอัตโนมัติ (คล้ายการค้นหาแบบ Recursive)
ตัวอย่างข้อมูลทดสอบ (อาร์เรย์ ClientDetails)
> db.findOperationDemo.insertOne({"ClientDetails": [{"ClientId": 101, "ClientName": "Chris"}, {"ClientId": 102, "ClientName": "Robert"}]});
{ "acknowledged": true, "insertedId": ObjectId("5cd9a118b50a6c6dd317ad99") }
> db.findOperationDemo.insertOne({"ClientDetails": [{"ClientId": 110, "ClientName": "David"}, {"ClientId": 112, "ClientName": "Mike"}]});
{ "acknowledged": true, "insertedId": ObjectId("5cd9a12fb50a6c6dd317ad9a") }
แสดงข้อมูลทั้งหมด
> db.findOperationDemo.find().pretty();
ผลลัพธ์
{
"_id": ObjectId("5cd9a118b50a6c6dd317ad99"),
"ClientDetails": [
{ "ClientId": 101, "ClientName": "Chris" },
{ "ClientId": 102, "ClientName": "Robert" }
]
}
{
"_id": ObjectId("5cd9a12fb50a6c6dd317ad9a"),
"ClientDetails": [
{ "ClientId": 110, "ClientName": "David" },
{ "ClientId": 112, "ClientName": "Mike" }
]
}
ค้นหา ClientId = 110 ในอาร์เรย์ ClientDetails
> db.findOperationDemo.find({"ClientDetails.ClientId": 110});
ผลลัพธ์ (คืนเอกสารทั้งหมดที่มี ClientId 110 ในอาร์เรย์)
{
"_id": ObjectId("5cd9a12fb50a6c6dd317ad9a"),
"ClientDetails": [
{ "ClientId": 110, "ClientName": "David" },
{ "ClientId": 112, "ClientName": "Mike" }
]
}
สรุป: เมื่อใช้ Dot Notation กับฟิลด์ที่เป็นอาร์เรย์ของออบเจ็กต์ (ClientDetails.ClientId) MongoDB จะค้นหาในทุกองค์ประกอบของอาร์เรย์และคืนเอกสารที่มีองค์ประกอบใดองค์ประกอบหนึ่งตรงเงื่อนไข