Sử dụng toán tử $pull với đường dẫn dot notation để xóa phần tử từ mảng lồng nhau cấp 2 (doubly-nested array).
Ví dụ minh họa
Tạo collection removeElementFromDoublyNestedArrayDemo:
> db.removeElementFromDoublyNestedArrayDemo.insertOne({
_id: "1", "TenNguoiDung": "Larry",
"ChiTietNguoiDung": [{
"TenQuocGia": "US",
"ViTri": [{"TenThanhPho": "New York"}, {"MaBuuChinh": "10001"}]
}]
});
> db.removeElementFromDoublyNestedArrayDemo.insertOne({
_id: "2", "TenNguoiDung": "Mike",
"ChiTietNguoiDung": [{
"TenQuocGia": "UK",
"ViTri": [{"TenThanhPho": "Bangor"}, {"MaBuuChinh": "20010"}]
}]
});
Xóa phần tử có MaBuuChinh="20010" trong document _id="2"
> db.removeElementFromDoublyNestedArrayDemo.update(
{_id: "2"},
{$pull: {"ChiTietNguoiDung.0.ViTri": {"MaBuuChinh": "20010"}}}
);
Kết quả: Phần tử {"MaBuuChinh": "20010"} bị xóa khỏi mảng ViTri của phần tử đầu tiên (index 0) trong mảng ChiTietNguoiDung.
Giải thích: Đường dẫn ChiTietNguoiDung.0.ViTri trỏ đến mảng ViTri của phần tử đầu tiên trong mảng ChiTietNguoiDung. $pull xóa tất cả phần tử khớp điều kiện trong mảng đó.