ใช้ $mul กับ filtered positional operator $[ ]
อ็อปเรเตอร์ $mul คูณค่าของฟิลด์ด้วยตัวเลข ร่วมกับ $[ ] (all positional operator) เพื่ออัปเดตทุกอิลิเมนต์ในอาร์เรย์
สร้างข้อมูลตัวอย่าง
> db.demo749.insertOne({"details":[{ "id":1, a:10 },{ "id":2, a:5 },{ "id":3, a:20 }]});
แสดงข้อมูลก่อนอัปเดต
> db.demo749.find().pretty();
ผลลัพธ์:
{ "_id" : ObjectId("5eae6fb0a930c785c834e565"), "details" : [ { "id" : 1, "a" : 10 }, { "id" : 2, "a" : 5 }, { "id" : 3, "a" : 20 } ] }
คิวรีอัปเดตค่า a ทุกตัวในอาร์เรย์ details คูณด้วย 2/5 (0.4)
> db.demo749.update(
{},
{ $mul: { "details.$[].a": 2/5 } },
{ multi:true }
)
ผลลัพธ์: WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
แสดงข้อมูลหลังอัปเดต
> db.demo749.find().pretty();
ผลลัพธ์: ค่า a ทุกตัวคูณ 0.4
{ "_id" : ObjectId("5eae6fb0a930c785c834e565"), "details" : [ { "id" : 1, "a" : 4 }, { "id" : 2, "a" : 2 }, { "id" : 3, "a" : 8 } ] }