Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ใช้ $addToSet เพิ่มค่าในอาร์เรย์ซ้อนอาร์เรย์ MongoDB

เมื่อต้องการเพิ่มค่าเข้าไปในอาร์เรย์ที่อยู่ภายในอาร์เรย์ (nested array) โดยไม่ให้ซ้ำ ให้ใช้ update() ร่วมกับโอเปอเรเตอร์ $addToSet โอเปอเรเตอร์นี้จะเพิ่มค่าเข้าไปก็ต่อเมื่อค่านั้นยังไม่มีอยู่ในอาร์เรย์

> db.demo509.insertOne({
...   "value1": [
...     { "value2": [ 76, 14, 56 ] },
...     { "value2": [ 12, 19, 91 ] },
...     { "value2": [ 87 ] }
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e88421d987b6e0e9d18f57d") }

แสดงข้อมูล:

> db.demo509.find();
{ "_id" : ObjectId("5e88421d987b6e0e9d18f57d"), "value1" : [ { "value2" : [ 76, 14, 56 ] }, { "value2" : [ 12, 19, 91 ] }, { "value2" : [ 87 ] } ] }

คิวรีเพิ่มค่า 1000 เข้าไปในอาร์เรย์ที่ 3 (index 2)

> db.demo509.update({}, {$addToSet: {"value1.2.value2": 1000}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ตรวจสอบผลลัพธ์:

> db.demo509.find();
{ "_id" : ObjectId("5e88421d987b6e0e9d18f57d"), "value1" : [ { "value2" : [ 76, 14, 56 ] }, { "value2" : [ 12, 19, 91 ] }, { "value2" : [ 87, 1000 ] } ] }

จุดสำคัญ

  • ใช้ dot notation ระบุตำแหน่ง: value1.2.value2 (index 2 = อาร์เรย์ตัวที่ 3)
  • $addToSet จะไม่เพิ่มค่าซ้ำ - ถ้ารันคิวรีเดิมอีกครั้ง ค่า 1000 จะไม่ถูกเพิ่มเข้าไปอีก
  • เหมาะสำหรับการจัดการ tags, categories, หรือรายการที่ต้องไม่ซ้ำกัน