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