การใช้ Dot Notation สำหรับ Query ข้อมูลลึก
ใน MongoDB สามารถ query เข้าถึงฟิลด์ภายในออบเจ็กต์ซ้อนได้โดยตรงด้วย dot notation เช่น "parent.child.field"
ตัวอย่างข้อมูล
> db.demo450.insertOne({ "Information": { "StudentDetails": { "StudentName": "Chris", "StudentAge": 21 } } });
> db.demo450.insertOne({ "Information": { "StudentDetails": { "StudentName": "David", "StudentAge": 23 } } });
> db.demo450.insertOne({ "Information": { "StudentDetails": { "StudentName": "Mike", "StudentAge": 22 } } });
แสดงข้อมูลทั้งหมด
> db.demo450.find();
Query ค้นหานักเรียนชื่อ David
> db.demo450.find({ "Information.StudentDetails.StudentName": "David" });
ผลลัพธ์
{ "_id": ObjectId(...), "Information": { "StudentDetails": { "StudentName": "David", "StudentAge": 23 } } }
หลักการสำคัญ
- ใช้จุด (.) คั่นระหว่างระดับของออบเจ็กต์
- ไม่ต้องใช้ $elemMatch สำหรับออบเจ็กต์เดี่ยว (single object)
- รองรับความลึกได้ไม่จำกัด ตราบใดที่โครงสร้างคงที่
- สามารถรวมกับ operator อื่นได้ เช่น $gt, $lt, $regex
ตัวอย่างเพิ่มเติม
// หานักเรียนอายุมากกว่า 21
db.demo450.find({ "Information.StudentDetails.StudentAge": { $gt: 21 } });
// หานักเรียนชื่อขึ้นต้นด้วย C
db.demo450.find({ "Information.StudentDetails.StudentName": { $regex: "^C" } });