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

วิธีลบ Multiple IDs ใน MongoDB

การลบเอกสารหลายรายการด้วย Array ของ _id ใน MongoDB

ใช้ ออเปอเรเตอร์ $in ร่วมกับ remove() หรือ deleteMany() เพื่อลบเอกสารหลายรายการพร้อมกันโดยระบุ Array ของ _id

ไวยากรณ์

db.yourCollectionName.remove( { _id: { $in: [yourObjectId1, yourObjectId2, yourObjectId3] } } );

แนะนำ (MongoDB 3.2+): ใช้ deleteMany() แทน remove()

db.yourCollectionName.deleteMany( { _id: { $in: [yourObjectId1, yourObjectId2, ...] } } );

ตัวอย่างการสร้างคอลเลกชันและเพิ่มข้อมูล

> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Chris","ClientAge":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cd7d6a629b87623db1b19") }
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Robert","ClientAge":28});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cd7dea629b87623db1b1a") }
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Sam","ClientAge":25});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cd7e9a629b87623db1b1b") }
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"John","ClientAge":34});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cd7f7a629b87623db1b1c") }
> db.deleteMultipleIdsDemo.insertOne({"ClientName":"Carol","ClientAge":36});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9cd803a629b87623db1b1d") }

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

> db.deleteMultipleIdsDemo.find().pretty();

ผลลัพธ์ (5 เอกสาร):

{ "_id" : ObjectId("5c9cd7d6a629b87623db1b19"), "ClientName" : "Chris", "ClientAge" : 26 }
{ "_id" : ObjectId("5c9cd7dea629b87623db1b1a"), "ClientName" : "Robert", "ClientAge" : 28 }
{ "_id" : ObjectId("5c9cd7e9a629b87623db1b1b"), "ClientName" : "Sam", "ClientAge" : 25 }
{ "_id" : ObjectId("5c9cd7f7a629b87623db1b1c"), "ClientName" : "John", "ClientAge" : 34 }
{ "_id" : ObjectId("5c9cd803a629b87623db1b1d"), "ClientName" : "Carol", "ClientAge" : 36 }

ลบเอกสาร 3 รายการ (_id ที่ 2, 4, 1)

> db.deleteMultipleIdsDemo.remove( { 
    _id: { 
        $in: [
            ObjectId("5c9cd7dea629b87623db1b1a"),
            ObjectId("5c9cd803a629b87623db1b1d"),
            ObjectId("5c9cd7d6a629b87623db1b19")
        ] 
    } 
} );
WriteResult({ "nRemoved" : 3 })

ตรวจสอบข้อมูลหลังลบ

> db.deleteMultipleIdsDemo.find().pretty();

ผลลัพธ์ (เหลือ 2 เอกสาร: Sam และ John):

{ "_id" : ObjectId("5c9cd7e9a629b87623db1b1b"), "ClientName" : "Sam", "ClientAge" : 25 }
{ "_id" : ObjectId("5c9cd7f7a629b87623db1b1c"), "ClientName" : "John", "ClientAge" : 34 }

คำอธิบาย

  • $in : Match เอกสารที่ _id อยู่ใน Array ที่ระบุ
  • nRemoved: 3 : แสดงจำนวนเอกสารที่ถูกลบจริง
  • Atomic: การลบหลายรายการในคำสั่งเดียวเป็น Atomic operation

การใช้ deleteMany() (แนะนำสำหรับ MongoDB 3.2+)

> db.deleteMultipleIdsDemo.deleteMany( { 
    _id: { 
        $in: [
            ObjectId("5c9cd7dea629b87623db1b1a"),
            ObjectId("5c9cd803a629b87623db1b1d"),
            ObjectId("5c9cd7d6a629b87623db1b19")
        ] 
    } 
} );
{ "acknowledged" : true, "deletedCount" : 3 }

ข้อแตกต่าง remove() vs deleteMany()

คุณสมบัติremove()deleteMany()
Return ValueWriteResultDeleteResult (มี deletedCount)
JustOne Optionรองรับ (justOne: true)ไม่รองรับ (ใช้ deleteOne)
Deprecatedใช่ (ใน MongoDB 5.0+)ไม่
Index Usageรองรับรองรับ

ตัวอย่างการลบด้วย _id แบบ String/Custom

// ถ้า _id เป็น String หรือ Number
db.collection.deleteMany({ _id: { $in: ["id1", "id2", 100, 200] } });

Best Practices

  • ใช้ deleteMany() สำหรับ MongoDB ใหม่
  • Backup ข้อมูลก่อนลบจำนวนมาก
  • ทดสอบ Query ด้วย find() ก่อน เพื่อยืนยันเอกสารที่จะถูกลบ
  • พิจารณาใช้ Transaction (MongoDB 4.0+) สำหรับการลบที่สำคัญ