ลบเอกสารที่ระบุ _id ด้วยคำสั่ง remove()
คำสั่ง remove() ใช้สำหรับลบเอกสารออกจากคอลเลกชัน สามารถระบุเงื่อนไขการลบได้ (ในที่นี้คือ _id)
ตัวอย่างข้อมูลทดสอบ
> db.demo56.insertOne({ "Name": "Chris" });
> db.demo56.insertOne({ "Name": "David" });
> db.demo56.insertOne({ "Name": "Bob" });
แสดงข้อมูลก่อนลบ
> db.demo56.find();
ผลลัพธ์:
{ "_id": ObjectId("5e272e0bcfb11e5c34d89917"), "Name": "Chris" }
{ "_id": ObjectId("5e272e10cfb11e5c34d89918"), "Name": "David" }
{ "_id": ObjectId("5e272e13cfb11e5c34d89919"), "Name": "Bob" }
คำสั่งลบเอกสารที่ _id เท่ากับค่าที่ระบุ
> db.demo56.remove({ _id: ObjectId("5e272e10cfb11e5c34d89918") });
ผลลัพธ์: WriteResult({ "nRemoved": 1 })
แสดงข้อมูลหลังลบ
> db.demo56.find();
ผลลัพธ์:
{ "_id": ObjectId("5e272e0bcfb11e5c34d89917"), "Name": "Chris" }
{ "_id": ObjectId("5e272e13cfb11e5c34d89919"), "Name": "Bob" }
ข้อสังเกตและแนวทางปัจจุบัน
- remove() ถูก deprecated แล้ว ตั้งแต่ MongoDB 3.2
- ควรใช้ deleteOne() สำหรับลบ 1 เอกสาร หรือ deleteMany() สำหรับหลายเอกสาร
- รูปแบบใหม่:
db.demo56.deleteOne({ _id: ObjectId("...") }) - deleteOne() จะลบได้สูงสุด 1 เอกสาร แม้เงื่อนไขจะ match หลายตัว
ความแตกต่างระหว่าง remove() และ deleteOne()
| คำสั่ง | พฤติกรรม |
|---|---|
| remove(query) | ลบทุกเอกสารที่ match (multi: true โดยค่าเริ่มต้น) |
| remove(query, { justOne: true }) | ลบ 1 เอกสารที่ match |
| deleteOne(query) | ลบ 1 เอกสารที่ match (แนะนำ) |
| deleteMany(query) | ลบทุกเอกสารที่ match (แนะนำ) |