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

วิธีอัปเดตเอกสารทั้งหมด (ทุกฟิลด์) ใน MongoDB ให้เร็วที่สุด


ใช้ 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() จะลบฟิลด์ที่ไม่ได้ระบุในเอกสารใหม่ หากต้องการเก็บฟิลด์เดิมบางส่วน ต้องนำมารวมในเอกสารใหม่ด้วย