Sử dụng positional operator $ để cập nhật phần tử cụ thể trong mảng lồng nhau.
Ví dụ minh họa
Tạo collection incrementValueInNestedArrayDemo với mảng ChiTietSinhVien lồng nhau:
> db.incrementValueInNestedArrayDemo.insertOne({
"MaDinhDanh": 1,
"ChiTietSinhVien": [
{"MaSinhVien": 101, "DiemSo": 97},
{"MaSinhVien": 103, "DiemSo": 99},
{"MaSinhVien": 105, "DiemSo": 92},
{"MaSinhVien": 107, "DiemSo": 59}
]
});
Truy vấn tăng điểm cho sinh viên MaSinhVien=107
> db.incrementValueInNestedArrayDemo.update(
{MaDinhDanh: 1, "ChiTietSinhVien.MaSinhVien": 107},
{$inc: {"ChiTietSinhVien.$.DiemSo": 1}}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kết quả: DiemSo của sinh viên 107 tăng từ 59 lên 60.
Giải thích: Toán tử $ tham chiếu đến phần tử đầu tiên khớp với điều kiện trong mảng (ChiTietSinhVien.MaSinhVien: 107). Chỉ cập nhật phần tử đó, không ảnh hưởng phần tử khác.