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

วิธีเปลี่ยนชื่อฟิลด์ _id หลัง Aggregation ใน MongoDB ($project)

ใช้ Stage $project ใน Aggregation Pipeline เพื่อ rename ฟิลด์ _id เป็นชื่ออื่น (เช่น mainId)

รูปแบบคำสั่ง

db.collection.aggregate([
    { $project: {
        _id: 0,           // ซ่อน _id เดิม
        newFieldName: "$_id",  // สร้างฟิลด์ใหม่จากค่า _id
        // ฟิลด์อื่นที่ต้องการ
    }}
]);

ตัวอย่างเต็มรูปแบบ

1. สร้างข้อมูลตัวอย่าง

> db.renameIdDemo.insertOne({"StudentName":"Chris"});
> db.renameIdDemo.insertOne({"StudentName":"Robert"});
> db.renameIdDemo.insertOne({"StudentName":"David"});

2. แสดงข้อมูลทั้งหมด

> db.renameIdDemo.find();
{ "_id" : ObjectId("..."), "StudentName" : "Chris" }
{ "_id" : ObjectId("..."), "StudentName" : "Robert" }
{ "_id" : ObjectId("..."), "StudentName" : "David" }

3. Aggregation: Rename _id เป็น mainId

> db.renameIdDemo.aggregate([
    { $project: {
        _id: 0,
        mainId: "$_id",
        StudentName: 1
    }}
]);

4. ผลลัพธ์: _id กลายเป็น mainId

{ "mainId" : ObjectId("..."), "StudentName" : "Chris" }
{ "mainId" : ObjectId("..."), "StudentName" : "Robert" }
{ "mainId" : ObjectId("..."), "StudentName" : "David" }

$project Operators ที่เกี่ยวข้อง

กรณีใช้งานจริง

  • API response: เปลี่ยน _id → id (frontend คุ้นเคย)
  • Join/Union: รวมข้อมูลจากหลาย collection ต้อง rename _id กันซ้ำ
  • Data transformation: เตรียมข้อมูลสำหรับ export/report

สรุป

  • ใช้ $project กับ { _id: 0, newName: "$_id" } เพื่อ rename _id
  • "$_id" = reference ค่าของฟิลด์ _id
  • สามารถเพิ่มฟิลด์อื่นใน $project เดียวกันได้
  • MongoDB 4.2+ ใช้ $set หรือ $addFields ได้เช่นกัน
Operatorตัวอย่างคำอธิบาย
$project{ newName: "$oldName" }Rename field
$addFields{ newField: "$_id" }เพิ่มฟิลด์ใหม่ คงฟิลด์เดิมไว้
$set(MongoDB 4.2+) alias ของ $addFieldsเพิ่ม/แก้ไขฟิลด์