ใช้ replaceOne() สำหรับการแทนที่เอกสารทั้งฉบับ
เมื่อต้องการอัปเดตทุกฟิลด์ของเอกสาร ให้ใช้ replaceOne() ซึ่งเร็วกว่าและชัดเจนกว่า $set หลายฟิลด์
ตัวอย่างข้อมูล
> db.demo431.insertOne({ "Name": "Chris", "Age": 32 });
> db.demo431.insertOne({ "Name": "David", "Age": 31 });
> db.demo431.insertOne({ "Name": "John", "Age": 24 });
> db.demo431.insertOne({ "Name": "Bob", "Age": 22 });
แสดงข้อมูลก่อนอัปเดต
> db.demo431.find();
Query แทนที่เอกสารของ John
> db.demo431.replaceOne(
{ "Name": "John" },
{ "Name": "Robert", "Age": 45 }
);
{ "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }
ผลลัพธ์หลังอัปเดต
{ "_id": ObjectId(...), "Name": "Chris", "Age": 32 }
{ "_id": ObjectId(...), "Name": "David", "Age": 31 }
{ "_id": ObjectId(...), "Name": "Robert", "Age": 45 }
{ "_id": ObjectId(...), "Name": "Bob", "Age": 22 }
ข้อดีของ replaceOne()
- Atomic operation - แทนที่ทั้งเอกสารในครั้งเดียว
- รักษา _id - _id เดิมยังคงอยู่ ไม่เปลี่ยน
- เร็วกว่า - ไม่ต้องระบุ $set หลายฟิลด์
- Validation - ตรวจสอบ schema ใหม่ทั้งเอกสาร
ข้อควรระวัง
replaceOne() จะลบฟิลด์ที่ไม่ได้ระบุในเอกสารใหม่ หากต้องการเก็บฟิลด์เดิมบางส่วน ต้องนำมารวมในเอกสารใหม่ด้วย