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

วิธีเปลี่ยน _id ของเอกสาร MongoDB (ไม่สามารถ Update โดยตรงได้)

ไม่สามารถ Update _id โดยตรงได้ แต่สามารถทำได้โดย: สร้าง _id ใหม่ Insert เอกสารใหม่ แล้วลบ _id เก่า

ขั้นตอน 4 Steps

  1. เก็บ ObjectId เก่าไว้ในตัวแปร
    var myDoc = db.yourCollection.findOne({_id: yourOldObjectId});
  2. กำหนด _id ใหม่
    myDoc._id = yourNewObjectId;
  3. Insert เอกสารใหม่
    db.yourCollection.insert(myDoc);
  4. ลบเอกสารเก่า
    db.yourCollection.remove({_id: yourOldObjectId});

ตัวอย่างจริง


// สร้างข้อมูล 3 รายการ
> db.updateIdDemo.insertOne({"StudentName":"Robert"});  // _id: ...683
> db.updateIdDemo.insertOne({"StudentName":"Chris"});   // _id: ...684
>> db.updateIdDemo.insertOne({"StudentName":"Maxwell"}); // _id: ...685

// แสดงก่อนเปลี่ยน
> db.updateIdDemo.find().pretty();

// เปลี่ยน _id ของ Robert
Step1: > myId = db.updateIdDemo.findOne({_id: ObjectId("...683")});
Step2: > myId._id = ObjectId("...689");
Step3: > db.updateIdDemo.insert(myId);
Step4: > db.updateIdDemo.remove({_id: ObjectId("...683")});

// ตรวจสอบหลังเปลี่ยน
> db.updateIdDemo.find().pretty();

ผลลัพธ์: _id ของ Robert เปลี่ยนจาก ...683 เป็น ...689 แล้ว


{ "_id" : ObjectId("...684"), "StudentName" : "Chris" }
{ "_id" : ObjectId("...685"), "StudentName" : "Maxwell" }
{ "_id" : ObjectId("...689"), "StudentName" : "Robert" }  // _id ใหม่
หมายเหตุ: _id เป็น Immutable Field ใน MongoDB ไม่สามารถ $set ได้โดยตรง วิธีนี้คือ Workaround มาตรฐาน