การดึงเฉพาะ 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หากไม่ต้องการ