ใช้ Projection ใน find() เพื่อเลือกแสดงเฉพาะฟิลด์ที่ต้องการ
ใน MongoDB การ เลือกฟิลด์ (Projection) ทำได้โดยระบุฟิลด์ที่ต้องการเป็น 1 หรือฟิลด์ที่ไม่ต้องการเป็น 0 ในพารามิเตอร์ที่สองของ find()
ตัวอย่างข้อมูลทดสอบ
> db.demo415.insertOne({ "ClientName": "Robert", "ClientCountryName": "US" });
> db.demo415.insertOne({ "ClientName": "David", "ClientCountryName": "UK" });
> db.demo415.insertOne({ "ClientName": "Bob", "ClientCountryName": "AUS" });
แสดงข้อมูลทั้งหมด
> db.demo415.find();
ผลลัพธ์:
{ "_id": ObjectId("..."), "ClientName": "Robert", "ClientCountryName": "US" }
{ "_id": ObjectId("..."), "ClientName": "David", "ClientCountryName": "UK" }
{ "_id": ObjectId("..."), "ClientName": "Bob", "ClientCountryName": "AUS" }
คำสั่งแสดงเฉพาะ ClientCountryName (ซ่อน _id และ ClientName)
> db.demo415.find({}, { _id: 0, ClientName: 0 });
ผลลัพธ์ที่ได้
{ "ClientCountryName": "US" }
{ "ClientCountryName": "UK" }
{ "ClientCountryName": "AUS" }
กฎของ Projection
- 1 = Include (แสดง), 0 = Exclude (ซ่อน)
- _id ถูกรวมอยู่เสมอ ถ้าไม่ระบุ _id: 0 จะแสดง _id เสมอ
- ไม่สามารถผสม 1 และ 0 ได้ (ยกเว้น _id: 0)
- ถ้าระบุฟิลด์เป็น 1 -> แสดงเฉพาะฟิลด์เหล่านั้น + _id
- ถ้าระบุฟิลด์เป็น 0 -> ซ่อนฟิลด์เหล่านั้น แสดงฟิลด์อื่นทั้งหมด
ตัวอย่างเพิ่มเติม
// แสดงเฉพาะ ClientName และ _id
db.demo415.find({}, { ClientName: 1 });
// ซ่อน ClientCountryName แสดงฟิลด์อื่นทั้งหมด
db.demo415.find({}, { ClientCountryName: 0 });
// แสดงเฉพาะ ClientCountryName (ซ่อน _id ด้วย)
db.demo415.find({}, { ClientCountryName: 1, _id: 0 });
Projection ใน Aggregation ($project)
ใน Aggregation Pipeline ใช้ $project stage ซึ่งมีความยืดหยุ่นมากกว่า:
> db.demo415.aggregate([
{ $project: { _id: 0, ClientCountryName: 1, upperCountry: { $toUpper: "$ClientCountryName" } } }
]);
สามารถคำนวณฟิลด์ใหม่ขณะ Project ได้