วิธีที่เร็วที่สุดในการอัปเดตข้อมูลใน 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()แทน