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

MongoDB: update() เร็วกว่า save() สำหรับการอัปเดตข้อมูล

วิธีที่เร็วที่สุดในการอัปเดตข้อมูลใน MongoDB คือใช้ update() (หรือ updateOne()/updateMany() ในเวอร์ชันใหม่) ไม่ใช่ save() ให้สร้างคอลเลกชันตัวอย่าง:

> db.demo320.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee51f8647eb59e562066") }
> db.demo320.insertOne({"Name":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee55f8647eb59e562067") }
> db.demo320.insertOne({"Name":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee59f8647eb59e562068") }
> db.demo320.insertOne({"Name":"Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ee5bf8647eb59e562069") }

แสดงข้อมูล:

> db.demo320.find();

อัปเดตชื่อ "Mike" ให้กลายเป็น "Bob" ด้วย update():

> db.demo320.update({Name:"Mike"},{$set:{Name:"Bob"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ตรวจสอบผลลัพธ์:

> db.demo320.find();

ผลลัพธ์:

{ "_id" : ObjectId("5e50ee51f8647eb59e562066"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50ee55f8647eb59e562067"), "Name" : "Robert" }
{ "_id" : ObjectId("5e50ee59f8647eb59e562068"), "Name" : "Bob" }
{ "_id" : ObjectId("5e50ee5bf8647eb59e562069"), "Name" : "Sam" }

ทำไม update() เร็วกว่า save()?

  • update() อัปเดตเฉพาะฟิลด์ที่ระบุ (partial update)
  • save() ทำการแทนที่เอกสารทั้งหมด (replace entire document) ต้องอ่าน-เขียนทั้งเอกสาร
  • save() ยังต้องตรวจสอบ _id ว่ามีอยู่แล้วหรือไม่ (upsert logic)
  • ใน MongoDB เวอร์ชันใหม่ ควรใช้ updateOne(), updateMany(), replaceOne() แทน