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

การดึงเฉพาะฟิลด์ที่ต้องการใน MongoDB ด้วย Dot Notation

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)