ใช้ Positional Operator $ ร่วมกับ $inc เพื่อเพิ่มค่าของฟิลด์ภายในอาร์เรย์ซ้อนกัน
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน incrementValueInNestedArrayDemo:
> db.incrementValueInNestedArrayDemo.insertOne(
... {
... "UniqueId":1,
... "StudentDetails":
... [
... { "StudentId":101, "StudentMarks":97 },
... { "StudentId":103, "StudentMarks":99 },
... { "StudentId":105, "StudentMarks":69 },
... { "StudentId":107, "StudentMarks":59 }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5c77dd71fc4e719b197a12f7") }
แสดงข้อมูล:
> db.incrementValueInNestedArrayDemo.find().pretty();
{"_id" : ObjectId("5c77dd71fc4e719b197a12f7"), "UniqueId" : 1, "StudentDetails" : [ {"StudentId" : 101, "StudentMarks" : 97}, {"StudentId" : 103, "StudentMarks" : 99}, {"StudentId" : 105, "StudentMarks" : 92}, {"StudentId" : 107, "StudentMarks" : 59} ] }
เพิ่มคะแนน StudentMarks ของนักศึกษาที่ StudentId=107 ขึ้น 1:
> db.incrementValueInNestedArrayDemo.update({UniqueId:1,"StudentDetails.StudentId":107}, {$inc:{"StudentDetails.$.StudentMarks":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ตรวจสอบผลลัพธ์ (คะแนนเปลี่ยนจาก 59 เป็น 60):
> db.incrementValueInNestedArrayDemo.find().pretty();
{"_id" : ObjectId("5c77dd71fc4e719b197a12f7"), "UniqueId" : 1, "StudentDetails" : [ {"StudentId" : 101, "StudentMarks" : 97}, {"StudentId" : 103, "StudentMarks" : 99}, {"StudentId" : 105, "StudentMarks" : 92}, {"StudentId" : 107, "StudentMarks" : 60} ] }