เปรียบเทียบสองวิธีลบเอกสารเดี่ยว
ทั้งคู่ลบเอกสารเพียงหนึ่งฉบับ แต่แตกต่างกันที่ ค่าที่คืนกลับ (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 |