MongoDB รองรับการ Projection (เลือกฟิลด์ที่ต้องการ) โดยใช้ Dot Notation เพื่อเข้าถึง Nested Field ได้ เนื้อหานี้สาธิตวิธี Query เอกสารที่มี ClientDetails.ClientFirstName เป็น "David" และดึงเฉพาะฟิลด์ ClientDetails.ClientFirstName โดยยกเว้นฟิลด์อื่นๆ
ตัวอย่างข้อมูลทดสอบ
> db.demo307.insertOne({
"CleintId":101,
"ClientDetails":{"ClientFirstName":"Chris","Age":34},
"ClientCountryName":"US"
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4eab88f8647eb59e56203c") }
> db.demo307.insertOne({
"CleintId":102,
"ClientDetails":{"ClientFirstName":"David","Age":31},
"ClientCountryName":"UK"
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4eab97f8647eb59e56203d") }
แสดงข้อมูลทั้งหมด
> db.demo307.find();
{
"_id" : ObjectId("5e4eab88f8647eb59e56203c"),
"CleintId" : 101,
"ClientDetails" : { "ClientFirstName" : "Chris", "Age" : 34 },
"ClientCountryName" : "US"
}
{
"_id" : ObjectId("5e4eab97f8647eb59e56203d"),
"CleintId" : 102,
"ClientDetails" : { "ClientFirstName" : "David", "Age" : 31 },
"ClientCountryName" : "UK"
}
Query ดึงเฉพาะฟิลด์ที่ต้องการ
> db.demo307.find(
{ "ClientDetails.ClientFirstName": 'David' },
{ "ClientDetails.Age" : 0, "ClientCountryName": 0, "CleintId": 0, "_id": 0 }
);
ผลลัพธ์
{ "ClientDetails" : { "ClientFirstName" : "David" } }
คำอธิบาย
- Argument แรก: Filter Condition - ค้นหาที่
ClientDetails.ClientFirstName= "David" - Argument ที่สอง: Projection - ระบุฟิลด์ที่ไม่ต้องการด้วย
0(Exclusion) - Dot Notation (
ClientDetails.ClientFirstName) ใช้เข้าถึง Nested Field ได้ _id: 0ต้องระบุชัดเจนหากไม่ต้องการ _id (Default จะ Include _id)- ไม่สามารถผสม Include (1) และ Exclude (0) ได้ใน Query เดียวกัน (ยกเว้น _id)