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

MongoDB Query ดึงเฉพาะ Single Field (Projection)

การดึงเฉพาะ Field เดียวใน MongoDB ทำได้โดยระบุ Projection ใน Argument ที่สองของ find() เนื้อหานี้สาธิตการ Query เฉพาะ StudentName โดยยกเว้น _id และ StudentId

ตัวอย่างข้อมูลทดสอบ

> db.demo10.insertOne({"StudentId":101,"StudentName":"Chris"});
{ "acknowledged": true, "insertedId": ObjectId("5e0f68a7d7df943a7cec4f9b") }

> db.demo10.insertOne({"StudentId":102,"StudentName":"David"});
{ "acknowledged": true, "insertedId": ObjectId("5e0f68afd7df943a7cec4f9c") }

> db.demo10.insertOne({"StudentId":103,"StudentName":"Bob"});
{ "acknowledged": true, "insertedId": ObjectId("5e0f68b5d7df943a7cec4f9d") }

แสดงข้อมูลทั้งหมด

> db.demo10.find();
{
  "_id": ObjectId("5e0f68a7d7df943a7cec4f9b"),
  "StudentId": 101, "StudentName": "Chris"
}
{
  "_id": ObjectId("5e0f68afd7df943a7cec4f9c"),
  "StudentId": 102, "StudentName": "David"
}
{
  "_id": ObjectId("5e0f68b5d7df943a7cec4f9d"),
  "StudentId": 103, "StudentName": "Bob"
}

Query Projection เฉพาะ StudentName

> db.demo10.find({}, {"_id": 0, "StudentId": 0});

ผลลัพธ์

{ "StudentName": "Chris" }
{ "StudentName": "David" }
{ "StudentName": "Bob" }

คำอธิบาย Projection Modes

  • Exclusion Mode (0): ระบุ Field ที่ ไม่ต้องการ - ใช้ได้กับหลาย Field
    { _id: 0, StudentId: 0 }
  • Inclusion Mode (1): ระบุ Field ที่ ต้องการ - _id ยกเว้น (Default Include)
    { StudentName: 1 }
  • ห้ามผสม Mode: ไม่สามารถใช้ 0 และ 1 พร้อมกันได้ (ยกเว้น _id: 0)
  • Nested Field: ใช้ Dot Notation { "address.city": 1 }
  • Array Element: { "tags.0": 1 } (Element แรก), { "tags": { $slice: 2 } } (2 ตัวแรก)

Best Practice

  • ใช้ Inclusion Mode (1) สำหรับ Query ที่ต้องการ Field น้อย (Network/IO น้อยกว่า)
  • ใช้ Exclusion Mode (0) สำหรับ Query ที่ต้องการ Field เกือบทั้งหมด
  • _id ต้อง Explicit Exclude ด้วย _id: 0 หากไม่ต้องการ