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

MongoDB: ใช้ findOneAndUpdate() อัปเดตเอกสารเดี่ยว

findOneAndUpdate() ใช้สำหรับอัปเดตและคืนค่าเอกสารเดี่ยวตามเงื่อนไข filter และ sort criteria ไวยากรณ์: db.collection.findOneAndUpdate(filter, update, options) สร้างคอลเลกชันตัวอย่าง:

> db.demo328.insertOne({Name:"Chris",Marks:67});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b19f8647eb59e56207a") }
> db.demo328.insertOne({Name:"David",Marks:78});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b24f8647eb59e56207b") }
> db.demo328.insertOne({Name:"Bob",Marks:97});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516b2bf8647eb59e56207c") }

แสดงข้อมูล:

> db.demo328.find();

เพิ่ม Marks 10 ให้คนชื่อ David (คืนค่าเอกสาร ก่อน อัปเดต):

> db.demo328.findOneAndUpdate({Name:"David"},{ $inc: { "Marks" : 10} });
{ "_id" : ObjectId("5e516b24f8647eb59e56207b"), "Name" : "David", "Marks" : 78 }

ตรวจสอบข้อมูลหลังอัปเดต:

> db.demo328.find();

ผลลัพธ์ (Marks ของ David กลายเป็น 88):

{ "_id" : ObjectId("5e516b19f8647eb59e56207a"), "Name" : "Chris", "Marks" : 67 }
{ "_id" : ObjectId("5e516b24f8647eb59e56207b"), "Name" : "David", "Marks" : 88 }
{ "_id" : ObjectId("5e516b2bf8647eb59e56207c"), "Name" : "Bob", "Marks" : 97 }

ตัวเลือกสำคัญ (options)

  • returnDocument: "before" (default) หรือ "after" - คืนค่าก่อน/หลังอัปเดต
  • upsert: true/false - สร้างเอกสารใหม่หากไม่พบ
  • sort: เรียงลำดับก่อนเลือกเอกสาร (หากมีหลายตัวตรงเงื่อนไข)
  • projection: จำกัดฟิลด์ที่คืนค่า

แตกต่างจาก updateOne()

findOneAndUpdate() คืนค่าเอกสาร (before/after) ส่วน updateOne() คืนค่า WriteResult เท่านั้น เหมาะสำหรับ atomic read-modify-write operations