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

ความแตกต่างระหว่าง deleteOne() และ findOneAndDelete() ใน MongoDB


เปรียบเทียบสองวิธีลบเอกสารเดี่ยว

ทั้งคู่ลบเอกสารเพียงหนึ่งฉบับ แต่แตกต่างกันที่ ค่าที่คืนกลับ (return value)

deleteOne()

  • ลบเอกสารหนึ่งฉบับที่ตรงกับ filter
  • คืนค่า: { acknowledged: true, deletedCount: 1 }
  • ไม่คืนข้อมูลที่ถูกลบ
  • เหมาะสำหรับการลบแบบไม่ต้องการข้อมูลกลับ

findOneAndDelete()

  • ลบเอกสารหนึ่งฉบับพร้อมคืนค่าเอกสารที่ถูกลบ
  • คืนค่า: เอกสารที่ถูกลบเอง
  • รองรับการ sort ก่อนลบ (ลบตัวไหนก่อนได้)
  • เหมาะสำหรับ queue, logging, หรือ audit trail

ตัวอย่างข้อมูล

> db.demo448.insertOne({ "Name": "Chris", "Age": 21 });
> db.demo448.insertOne({ "Name": "David", "Age": 23 });
> db.demo448.insertOne({ "Name": "Bob", "Age": 22 });

ใช้ deleteOne()

> db.demo448.deleteOne({ _id: ObjectId("5e7a2926bbc41e36cc3caecb") });
{ "acknowledged": true, "deletedCount": 1 }

ใช้ findOneAndDelete()

> db.demo448.findOneAndDelete({ _id: ObjectId("5e7a2930bbc41e36cc3caecc") });
{ "_id": ObjectId("5e7a2930bbc41e36cc3caecc"), "Name": "Bob", "Age": 22 }

ตารางเปรียบเทียบ

คุณสมบัติdeleteOne()findOneAndDelete()
คืนเอกสารที่ลบไม่ใช่
รองรับ sortไม่ใช่
Atomicใช่ใช่
เหมาะสำหรับลบทั่วไปQueue, Audit, Logging