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

วิธีลบ Primary Key (_id) ออกจากผลลัพธ์ใน MongoDB


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