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

การเลือกฟิลด์เฉพาะที่ต้องการในคิวรี MongoDB (Projection)

ใช้ 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 ได้