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ức | Mô 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óa | Document đã 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
bulkWritecho thao tác phức tạp hơn