ใช้ remove() ร่วมกับ findOne() ลบเอกสารเดียว
ใน MongoDB Legacy API ใช้ remove() แต่ควรระบุเงื่อนไขเฉพาะเจาะจง (โดยเฉพาะ _id) เพื่อลบเพียง 1 เอกสาร
ตัวอย่างข้อมูล
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"John","LastName":"Smith"});
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"Carol","LastName":"Taylor"});
> db.removeOnlyOneDocumentDemo.insertOne({"FirstName":"David","LastName":"Miller"});
ขั้นตอนลบเฉพาะ David
> var documentValue = db.removeOnlyOneDocumentDemo.findOne({'FirstName':'David'});
> db.removeOnlyOneDocumentDemo.remove({_id: documentValue._id});
WriteResult({ "nRemoved" : 1 })
ผลลัพธ์: เหลือ John และ Carol
> db.removeOnlyOneDocumentDemo.find().pretty();
{ "_id" : ObjectId("5cc6ca2f9cb58ca2b005e674"), "FirstName" : "John", "LastName" : "Smith" }
{ "_id" : ObjectId("5cc6ca399cb58ca2b005e675"), "FirstName" : "Carol", "LastName" : "Taylor" }
⚠️ คำเตือน: remove() ถูก Deprecated แล้ว
MongoDB 3.2+ แนะนำให้ใช้เมธอดใหม่แทน:
// ลบ 1 เอกสาร (แนะนำ)
db.collection.deleteOne({ _id: documentValue._id });
// ลบหลายเอกสาร
db.collection.deleteMany({ FirstName: "David" });
ตัวอย่างแบบใหม่ (Best Practice)
> db.removeOnlyOneDocumentDemo.deleteOne({ FirstName: "David" });
{ "acknowledged" : true, "deletedCount" : 1 }
สรุป
- ใช้
deleteOne()แทนremove()สำหรับลบ 1 เอกสาร - ระบุ Filter ให้เฉพาะเจาะจงที่สุด (ดีที่สุดคือ
_id) deleteOne()คืนค่าdeletedCountบอกจำนวนที่ลบได้