ตัวดำเนินการ $addToSet จะเพิ่มค่าให้กับอาร์เรย์เว้นแต่จะมีค่าอยู่แล้ว ในกรณีนี้ $addToSet จะไม่ทำอะไรกับอาร์เรย์นั้น
ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo380.insertOne({ ... ... "details" : [ ... { ... "Name" : "Chris", ... "details1" : [ ] ... }, ... { ... "Name" : "David", ... "details1" : [ ] ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5b56e32ae06a1609a00b11") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo380.find().pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5b56e32ae06a1609a00b11"), "details" : [ { "Name" : "Chris", "details1" : [ ] }, { "Name" : "David", "details1" : [ ] } ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อเพิ่มอาร์เรย์ของวัตถุที่ซ้อนกันลึก -
> db.demo380.update({ ... "details.Name": "David" ... }, { ... $addToSet: { ... "details.$.details1": { ... 'SubjectName': "MongoDB", ... 'TeacherName':"Bob" ... } ... } ... }, false, true); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo380.find().pretty();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e5b56e32ae06a1609a00b11"), "details" : [ { "Name" : "Chris", "details1" : [ ] }, { "Name" : "David", "details1" : [ { "SubjectName" : "MongoDB", "TeacherName" : "Bob" } ] } ] }