ใช้ Projection ใน find() ตั้งค่าฟิลด์เป็น 0
ใน MongoDB ไม่สามารถลบ _id ออกจากเอกสารจริงได้ (immutable) แต่สามารถ **ไม่แสดง** ในผลลัพธ์ได้โดยตั้งค่า _id: 0 ใน projection
ตัวอย่างข้อมูล
> db.demo471.insertOne({ "ClientId": 101, "ClientName": "Chris" });
> db.demo471.insertOne({ "ClientId": 102, "ClientName": "Bob" });
> db.demo471.insertOne({ "ClientId": 103, "ClientName": "David" });
Query ไม่แสดง _id และ ClientId
> db.demo471.find({}, { _id: 0, ClientId: 0 });
ผลลัพธ์
{ "ClientName": "Chris" }
{ "ClientName": "Bob" }
{ "ClientName": "David" }
กฎของ Projection
{ field: 1 }- Include (รวม) - _id ถูกรวมอัตโนมัติ{ field: 0 }- Exclude (ตัดออก) - _id ต้องระบุ 0 เองถ้าไม่ต้องการ- ไม่สามารถผสม Include/Exclude ได้** (ยกเว้น _id)
ตัวอย่าง Projection ต่างๆ
// แสดงเฉพาะ ClientName
db.demo471.find({}, { _id: 0, ClientName: 1 });
// แสดงทุกอย่าง ยกเว้น _id
db.demo471.find({}, { _id: 0 });
// แสดงทุกอย่าง ยกเว้น ClientId
db.demo471.find({}, { ClientId: 0 }); // _id ยังแสดงอยู่
// ใช้ $project ใน aggregation (ยืดหยุ่นกว่า)
db.demo471.aggregate([{ $project: { _id: 0, ClientName: 1, ClientId: "$ClientId" } }]);
ข้อสำคัญ
_id ไม่สามารถลบออกจากเอกสารจริงได้ - เป็น primary key ที่ immutable หากต้องการ custom ID ให้ใช้ฟิลด์อื่น (เช่น ClientId) และตั้งค่า _id เองตอน insert:
db.demo471.insertOne({ _id: 101, "ClientName": "Chris" }); // _id = 101 แทน ObjectId