ใน MongoDB สามารถใช้เมธอด find() ค้นหาข้อมูลภายในฟิลด์ซ้อน (nested fields) ได้โดยใช้การเขียนแบบ Dot Notation (เครื่องหมายจุด)
รูปแบบคำสั่ง
db.yourCollectionName.find({"yourOuterFieldName.yourInnerFieldName": "yourValue"}).pretty();
ตัวอย่างการสร้างข้อมูลทดสอบ
> db.searchForNestedKeysDemo.insertOne({"ClientName": "Larry", "ClientAge": 28, "ClientExtra Details": {"isEducated": true, "CountryName": "US"}});
{ "acknowledged": true, "insertedId": ObjectId("5ca20e8b66324ffac2a7dc64") }
> db.searchForNestedKeysDemo.insertOne({"ClientName": "Chris", "ClientAge": 29, "ClientExtra Details": {"isEducated": false, "CountryName": "UK"}});
{ "acknowledged": true, "insertedId": ObjectId("5ca20ea366324ffac2a7dc65") }
> db.searchForNestedKeysDemo.insertOne({"ClientName": "David", "ClientAge": 39, "ClientExtra Details": {"isEducated": true, "CountryName": "AUS"}});
{ "acknowledged": true, "insertedId": ObjectId("5ca20eba66324ffac2a7dc66") }
แสดงข้อมูลทั้งหมดในคอลเลกชัน
> db.searchForNestedKeysDemo.find().pretty();
ผลลัพธ์
{
"_id": ObjectId("5ca20e8b66324ffac2a7dc64"),
"ClientName": "Larry",
"ClientAge": 28,
"ClientExtraDetails": {
"isEducated": true,
"CountryName": "US"
}
}
{
"_id": ObjectId("5ca20ea366324ffac2a7dc65"),
"ClientName": "Chris",
"ClientAge": 29,
"ClientExtraDetails": {
"isEducated": false,
"CountryName": "UK"
}
}
{
"_id": ObjectId("5ca20eba66324ffac2a7dc66"),
"ClientName": "David",
"ClientAge": 39,
"ClientExtraDetails": {
"isEducated": true,
"CountryName": "AUS"
}
}
ค้นหาข้อมูลด้วยคีย์ซ้อน
> db.searchForNestedKeysDemo.find({"ClientExtraDetails.CountryName": "UK"}).pretty();
ผลลัพธ์
{
"_id": ObjectId("5ca20ea366324ffac2a7dc65"),
"ClientName": "Chris",
"ClientAge": 29,
"ClientExtraDetails": {
"isEducated": false,
"CountryName": "UK"
}
}
สรุป: ใช้ Dot Notation (ClientExtraDetails.CountryName) เพื่อเข้าถึงฟิลด์ภายในออบเจ็กต์ซ้อนได้โดยตรงในเงื่อนไขการค้นหา