Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีดึงข้อมูลฝังตัว (Embedded Data) ในเอกสาร MongoDB

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() ไม่ต้องดึงเอกสารทั้งหมดแล้วค่อยกรองฝั่งแอปพลิเคชัน