Sử dụng $mul với all positional operator $[ ]
Toán tử $mul nhân giá trị trường với số cho trước. $[ ] áp dụng cho tất cả phần tử trong mảng.
Dữ liệu mẫu
> db.demo749.insertOne({
details: [
{ id: 1, a: 10 },
{ id: 2, a: 5 },
{ id: 3, a: 20 }
]
});
Truy vấn: nhân trường a của mọi phần tử trong mảng details với 2/5
db.demo749.update(
{},
{ $mul: { "details.$[].a": 2/5 } },
{ multi: true }
);
Kết quả
{ "_id": ObjectId("..."), "details": [
{ "id": 1, "a": 4 }, // 10 * 0.4 = 4
{ "id": 2, "a": 2 }, // 5 * 0.4 = 2
{ "id": 3, "a": 8 } // 20 * 0.4 = 8
] }
Tất cả phần tử mảng details đều được cập nhật trường a theo công thức.