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

MongoDB ลบเอกสารเดี่ยวด้วย remove() หรือ deleteOne()

การลบเอกสารเพียงหนึ่งรายการใน 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 APIModern 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 พร้อมกัน