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

การอัปเดตฟิลด์ _id ใน MongoDB

เปลี่ยนค่า _id ใน MongoDB: Insert ใหม่ + Remove เก่า

บทความนี้สาธิตว่า _id ใน MongoDB เป็น Immutable (ไม่สามารถ Update โดยตรงได้) วิธีแก้คือ Insert เอกสารใหม่พร้อม _id ใหม่ แล้ว Remove เอกสารเก่า

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

> db.updatingDemo.insertOne({"StudentName":"Robert"});
{ "acknowledged": true, "insertedId": ObjectId("5e04dae5150ee0e76c06a04b") }
> db.updatingDemo.insertOne({"StudentName":"Bob"});
{ "acknowledged": true, "insertedId": ObjectId("5e04dae7150ee0e76c06a04c") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.updatingDemo.find();

ผลลัพธ์:

{ "_id": ObjectId("5e04dae5150ee0e76c06a04b"), "StudentName": "Robert" }
{ "_id": ObjectId("5e04dae7150ee0e76c06a04c"), "StudentName": "Bob" }

ขั้นตอนที่ 3: เปลี่ยน _id ของ Bob จาก ObjectId เป็น 1001

  1. findOne หาเอกสาร Bob เก็บไว้ในตัวแปร
  2. แก้ไข myDocument._id = 1001
  3. insert เอกสารใหม่ (จะได้ _id ใหม่คือ 1001)
  4. remove เอกสารเก่าตาม _id เดิม
> myDocument = db.updatingDemo.findOne({"StudentName":"Bob"});
{ "_id": ObjectId("5e04dae7150ee0e76c06a04c"), "StudentName": "Bob" }
> myDocument._id = 1001;
1001
> db.updatingDemo.insert(myDocument);
WriteResult({ "nInserted": 1 })
> db.updatingDemo.remove({_id:ObjectId("5e04dae7150ee0e76c06a04c")});
WriteResult({ "nRemoved": 1 })

ขั้นตอนที่ 4: ตรวจสอบผลลัพธ์

> db.updatingDemo.find();

ผลลัพธ์:

{ "_id": ObjectId("5e04dae5150ee0e76c06a04b"), "StudentName": "Robert" }
{ "_id": 1001, "StudentName": "Bob" }

สรุป: _id ไม่สามารถ Update แบบ In-place ได้ ต้อง Insert ใหม่พร้อม _id ใหม่ แล้วลบเก่า ระวังเรื่อง Foreign Key References หากมี Collection อื่นอ้างอิง _id นี้