การลบเอกสารเพียงหนึ่งรายการใน MongoDB สามารถทำได้ด้วย remove() (Legacy) หรือ deleteOne() (Modern) โดยระบุ Filter Condition ที่ Unique พอจะ Match เอกสารเดียว เนื้อหานี้สาธิตการลบเอกสารที่ ClientId = 102
ตัวอย่างข้อมูลทดสอบ
> db.demo165.insertOne({"ClientId":101,"ClientName":"Chris","ClientAge":34});
{ "acknowledged" : true, "insertedId" : ObjectId("5e36895c9e4f06af551997cc") }
> db.demo165.insertOne({"ClientId":102,"ClientName":"Bob","ClientAge":32});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3689659e4f06af551997cd") }
> db.demo165.insertOne({"ClientId":103,"ClientName":"David","ClientAge":35});
{ "acknowledged" : true, "insertedId" : ObjectId("5e36896d9e4f06af551997ce") }
แสดงข้อมูลก่อนลบ
> db.demo165.find();
{
"_id" : ObjectId("5e36895c9e4f06af551997cc"),
"ClientId" : 101, "ClientName" : "Chris", "ClientAge" : 34
}
{
"_id" : ObjectId("5e3689659e4f06af551997cd"),
"ClientId" : 102, "ClientName" : "Bob", "ClientAge" : 32
}
{
"_id" : ObjectId("5e36896d9e4f06af551997ce"),
"ClientId" : 103, "ClientName" : "David", "ClientAge" : 35
}
Query ลบเอกสารเดี่ยว (Legacy)
> db.demo165.remove({"ClientId":102});
WriteResult({ "nRemoved" : 1 })
ผลลัพธ์หลังลบ
> db.demo165.find();
{
"_id" : ObjectId("5e36895c9e4f06af551997cc"),
"ClientId" : 101, "ClientName" : "Chris", "ClientAge" : 34
}
{
"_id" : ObjectId("5e36896d9e4f06af551997ce"),
"ClientId" : 103, "ClientName" : "David", "ClientAge" : 35
}
Syntax ใหม่ (MongoDB 3.2+) - แนะนำใช้
> db.demo165.deleteOne({"ClientId": 102});
{ "acknowledged" : true, "deletedCount" : 1 }
เปรียบเทียบ remove() vs deleteOne()
| remove() | deleteOne() |
|---|---|
| Legacy API | Modern CRUD API |
| Default ลบทุก Match (ต้องระบุ justOne: true) | Default ลบแค่ 1 Document |
| คืน WriteResult (nRemoved) | คืน Object (deletedCount, acknowledged) |
| Deprecated ใน Driver ใหม่ | Standard, รองรับ Write Concern, Collation |
ข้อแนะนำ
- ใช้
deleteOne()สำหรับลบ 1 Document (ชัดเจนกว่า) - ใช้
deleteMany()สำหรับลบหลาย Document - ระบุ Filter ให้ Specific ที่สุด (เช่น _id) เพื่อป้องกันลบผิด
- พิจารณาใช้ Transaction หากลบหลาย Collection พร้อมกัน