Để xóa giá trị khỏi mảng lồng nhau (matrix/2D array), sử dụng toán tử $pull trong MongoDB.
Tạo collection với ma trận 6x2
> db.demo632.insertOne({
"arrayMatrix": [
[10,20], [10,20], [10,20],
[10,20], [10,20], [10,20]
]
});
Hiển thị ma trận gốc
> db.demo632.find().pretty();
Kết quả:
{
"_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
"arrayMatrix" : [
[10, 20], [10, 20], [10, 20],
[10, 20], [10, 20], [10, 20]
]
}
Xóa giá trị 20 khỏi từng hàng (index 0-5)
> db.demo632.update(
{},
{
"$pull": {
"arrayMatrix.0": 20,
"arrayMatrix.1": 20,
"arrayMatrix.2": 20,
"arrayMatrix.3": 20,
"arrayMatrix.4": 20,
"arrayMatrix.5": 20
}
}
)
Kết quả sau xóa:
{
"_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
"arrayMatrix" : [
[10], [10], [10], [10], [10], [10]
]
}
Giải thích:
$pullxóa tất cả phần tử khớp giá trị khỏi mảng- Cú pháp
"arrayMatrix.0"truy cập phần tử index 0 của mảng ngoài (hàng đầu tiên) - Phải chỉ định rõ từng index (0,1,2,3,4,5) vì
$pullkhông hỗ trợ wildcard cho index mảng lồng nhau - Mỗi hàng
[10,20]trở thành[10]sau khi xóa 20
Cải tiến: Nếu ma trận lớn, có thể dùng $[] (all positional operator) MongoDB 3.6+ kết hợp arrayFilters để xóa theo điều kiện mà không cần liệt kê index.