MongoDB รองรับการจัดเก็บข้อมูลแบบ Nested/Embedded Document สามารถดึงเฉพาะส่วนที่ต้องการได้โดยใช้ Dot Notation ใน projection
รูปแบบคำสั่ง
db.collectionName.find({}, { "outerField.innerField": 1 }).pretty();
ตัวอย่างเต็มรูปแบบ
1. สร้างข้อมูลที่มี Embedded Document
> db.embeddedCollectionDemo.insertOne({
"StudentName" : "Larry",
"StudentDetails" : {
"Larry1234" : { "ProjectName" : "Student Web Tracker" },
"Larry7645" : { "ProjectName" : "Hospital Management System" },
"Larry9879" : { "ProjectName" : "Library Management System" }
}
});
2. แสดงข้อมูลทั้งหมด
> db.embeddedCollectionDemo.find().pretty();
{
"_id" : ObjectId("..."),
"StudentName" : "Larry",
"StudentDetails" : {
"Larry1234" : { "ProjectName" : "Student Web Tracker" },
"Larry7645" : { "ProjectName" : "Hospital Management System" },
"Larry9879" : { "ProjectName" : "Library Management System" }
}
}
3. ดึงเฉพาะข้อมูลฝังตัวที่ต้องการ (Larry7645)
> db.embeddedCollectionDemo.find({}, { 'StudentDetails.Larry7645': 1 }).pretty();
{
"_id" : ObjectId("..."),
"StudentDetails" : {
"Larry7645" : { "ProjectName" : "Hospital Management System" }
}
}
จุดสำคัญ
- ใช้ Dot Notation ใน projection (พารามิเตอร์ที่ 2 ของ find)
{ "path.to.field": 1 }= include เฉพาะฟิลด์นี้ (ยกเว้น _id ต้องระบุ 0 ถ้าไม่ต้องการ)- สามารถดึงได้หลายระดับ:
"a.b.c.d" - _id จะถูก include เสมอ ถ้าไม่ต้องการต้องระบุ
{ _id: 0, "path": 1 }
สรุป
การดึง Embedded Data ใน MongoDB ทำได้ง่ายด้วย Dot Notation ใน projection ของ find() ไม่ต้องดึงเอกสารทั้งหมดแล้วค่อยกรองฝั่งแอปพลิเคชัน