MongoDB cung cấp toán tử $mod trong truy vấn để lọc các số theo modulo. Kết hợp với $pull, có thể xóa tất cả các số chẵn khỏi mảng trong một thao tác duy nhất.
Tạo dữ liệu mẫu
> db.pullEvenNumbersDemo.insertOne({"AllNumbers":[101,102,104,106,108,109,110,112,14,17,18,21]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd45b072cba06f46efe9eea") }
Xem dữ liệu ban đầu
> db.pullEvenNumbersDemo.find().pretty();
Xóa số chẵn khỏi mảng
Sử dụng
$pullvới$mod: [2, 0](số chia 2 dư 0 = số chẵn):> db.pullEvenNumbersDemo.updateMany( {}, { "$pull": { "AllNumbers": { "$mod": [ 2, 0 ] } } } ); { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }Kết quả sau khi xóa
> db.pullEvenNumbersDemo.find().pretty();Giải thích kỹ thuật
$mod: [divisor, remainder]: Trả về tài liệu nếu giá trị trường chia chodivisordưremainder[2, 0]: Chia cho 2 dư 0 → số chẵn$pull: Xóa tất cả phần tử khớp điều kiện khỏi mảngupdateMany({}, ...): Áp dụng cho tất cả tài liệu trong collection
Các biến thể hữu ích
- Lấy số lẻ:
{$mod: [2, 1]} - Số chia hết cho 3:
{$mod: [3, 0]} - Chỉ xóa 1 phần tử đầu tiên khớp: Sử dụng
updateOne()thay vìupdateMany()
Lưu ý hiệu năng
Với mảng lớn, cân nhắc tạo index trên trường mảng hoặc sử dụng Aggregation Pipeline để xử lý phức tạp hơn.