Sử dụng positional operator $ để cập nhật phần tử khớp
Toán tử positional $ xác định phần tử đầu tiên trong mảng khớp với điều kiện truy vấn, cho phép cập nhật chính xác phần tử đó.
Dữ liệu sản phẩm
> db.demo22.insertOne({
ProductId: 101,
ProductDetails: [
{ ProductFirstPrice: '35', ProductSecondPrice: '75' },
{ ProductFirstPrice: '', ProductSecondPrice: '' },
{ ProductFirstPrice: '78', ProductSecondPrice: '24' }
]
});
Cập nhật ProductFirstPrice = '' cho phần tử có giá trị '35'
> db.demo22.update(
{ "ProductDetails.ProductFirstPrice": "35" },
{ $set: { "ProductDetails.$.ProductFirstPrice": "" } },
false, true
);
Kết quả
{
"_id": ObjectId("..."),
"ProductId": 101,
"ProductDetails": [
{ "ProductFirstPrice": "", "ProductSecondPrice": "75" }, <-- Đã cập nhật
{ "ProductFirstPrice": "", "ProductSecondPrice": "" },
{ "ProductFirstPrice": "78", "ProductSecondPrice": "24" }
]
}
Lưu ý: Chỉ phần tử đầu tiên khớp được cập nhật. Để cập nhật tất cả, dùng $[] (all positional operator) từ MongoDB 3.6+.