Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách xóa nhiều _id cùng lúc trong MongoDB

Giới thiệu

Để xóa nhiều tài liệu theo danh sách _id, bạn sử dụng phương thức remove() (hoặc deleteMany() hiện đại) kết hợp với toán tử $in.

Cú pháp

// Cách cũ (deprecated)
db.collection.remove({ _id: { $in: [ ObjectId1, ObjectId2, ... ] } });

// Cách hiện đại (MongoDB 3.2+)
db.collection.deleteMany({ _id: { $in: [ ObjectId1, ObjectId2, ... ] } });

Ví dụ minh họa

1. Tạo collection

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

2. Xóa 3 tài liệu theo _id

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

3. Kiểm tra kết quả - còn 2 tài liệu

> db.xoaNhieuId.find().pretty();
{ "_id" : ObjectId("5c9cd7e9a629b87623db1b1b"), "TenKhachHang" : "Sam", "TuoiKhachHang" : 25 }
{ "_id" : ObjectId("5c9cd7f7a629b87623db1b1c"), "TenKhachHang" : "John", "TuoiKhachHang" : 34 }

Các phương thức xóa hiện đại (MongoDB 3.2+)

Phương thứcMô tảTrả về
deleteOne(filter)Xóa 1 tài liệu khớp filter{ acknowledged: true, deletedCount: 1 }
deleteMany(filter)Xóa TẤT CẢ tài liệu khớp filter{ acknowledged: true, deletedCount: N }
findOneAndDelete(filter)Tìm và xóa 1 tài liệu, trả về doc đã xóaDocument đã xóa hoặc null

Ví dụ với deleteMany

var idsToDelete = [
    ObjectId("5c9cd7dea629b87623db1b1a"),
    ObjectId("5c9cd803a629b87623db1b1d"),
    ObjectId("5c9cd7d6a629b87623db1b19")
];

db.xoaNhieuId.deleteMany({ _id: { $in: idsToDelete } });
// Kết quả: { "acknowledged" : true, "deletedCount" : 3 }

Lưu ý hiệu suất

  • Tạo index trên _id (mặc định đã có) giúp xóa nhanh
  • Với số lượng ID rất lớn (>1000), cân nhắc chia batch
  • Sử dụng bulkWrite cho thao tác phức tạp hơn