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

วิธีลบเอกสารใน MongoDB ตาม _id ด้วย remove()

ใช้เมธอด remove() ร่วมกับ ObjectId เพื่อลบเอกสารเฉพาะรายการตาม _id

รูปแบบคำสั่ง

db.collectionName.remove({ "_id": ObjectId("yourObjectId") });

ตัวอย่างเต็มรูปแบบ

1. สร้างข้อมูลตัวอย่าง

> db.removeDocumentOnBasisOfId.insertOne({"UserName":"Larry","UserAge":23,"UserCountryName":"US"});
> db.removeDocumentOnBasisOfId.insertOne({"UserName":"Sam","UserAge":21,"UserCountryName":"UK"});
> db.removeDocumentOnBasisOfId.insertOne({"UserName":"Chris","UserAge":24,"UserCountryName":"US"});
> db.removeDocumentOnBasisOfId.insertOne({"UserName":"Robert","UserAge":26,"UserCountryName":"UK"});
> db.removeDocumentOnBasisOfId.insertOne({"UserName":"David","UserAge":28,"UserCountryName":"AUS"});

2. แสดงข้อมูลก่อนลบ

> db.removeDocumentOnBasisOfId.find().pretty();
{ "_id" : ObjectId("5c986f9f..."), "UserName" : "Larry", "UserAge" : 23, "UserCountryName" : "US" }
{ "_id" : ObjectId("5c986fb4..."), "UserName" : "Sam", "UserAge" : 21, "UserCountryName" : "UK" }
{ "_id" : ObjectId("5c986fc0..."), "UserName" : "Chris", "UserAge" : 24, "UserCountryName" : "US" }
{ "_id" : ..., "UserName" : "Robert", "UserAge" : 26, "UserCountryName" : "UK" }
{ "_id" : ..., "UserName" : "David", "UserAge" : 28, "UserCountryName" : "AUS" }

3. ลบเอกสารของ Chris (รู้ _id)

> db.removeDocumentOnBasisOfId.remove({ "_id": ObjectId("5c986fc0330fd0aa0d2fe4a5") });
WriteResult({ "nRemoved" : 1 })

4. ตรวจสอบหลังลบ

> db.removeDocumentOnBasisOfId.find().pretty();
{ "_id" : ..., "UserName" : "Larry", ... }
{ "_id" : ..., "UserName" : "Sam", ... }
{ "_id" : ..., "UserName" : "Robert", ... }
{ "_id" : ..., "UserName" : "David", ... }

Chris ถูกลบออกแล้ว

คำสั่งลบสมัยใหม่ (MongoDB 3.2+)

// ลบ 1 รายการ (แนะนำ)
db.collection.deleteOne({ "_id": ObjectId("...") });

// ลบหลายรายการ
db.collection.deleteMany({ "_id": { $in: [ObjectId("..."), ObjectId("...")] } });

สรุป

  • ใช้ remove({ _id: ObjectId("...") }) สำหรับ shell แบบเก่า
  • แนะนำใช้ deleteOne() หรือ deleteMany() ในโค้ด production
  • ต้องใช้ ObjectId() ครอบ _id ถ้าเป็น ObjectId (ไม่ใช่ string)
  • nRemoved: 1 แสดงว่าลบสำเร็จ 1 รายการ