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

อัปเดตอาร์เรย์ใน MongoDB ด้วย $push และ $elemMatch

การเพิ่มข้อมูลเข้าไปในอาร์เรย์ที่อยู่ภายในออบเจกต์ซ้อน (nested array in object) ใช้ updateOne() ร่วมกับ $push และ $elemMatch เพื่อระบุตำแหน่งที่ถูกต้อง

> db.demo526.insertOne({
...   "CountryName": "US",
...   "TeacherName": "Bob",
...   "StudentInformation": [
...     {"Name": "Chris", "Subject": "MySQL", "ListOfMailId": []},
...     {"Name": "David", "Subject": "MongoDB", "ListOfMailId": []}
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e8af031437efc8605595b6b") }

แสดงข้อมูล:

> db.demo526.find();

คิวรีเพิ่ม Email ให้ David ที่เรียน MongoDB

> db.demo526.updateOne(
...   {
...     _id: ObjectId("5e8af031437efc8605595b6b"),
...     "StudentInformation": {$elemMatch: {"Name": "David", "Subject": "MongoDB"}}
...   },
...   {
...     $push: {"StudentInformation.$.ListOfMailId": {"MailId": "David@gmail.com"}}
...   }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

ผลลัพธ์ - David ได้ Email เพิ่มเข้ามา:


คำอธิบาย

  • $elemMatch: จับคู่ออบเจกต์ในอาร์เรย์ที่ตรงเงื่อนไขหลายฟิลด์ (Name และ Subject)
  • Positional $: อ้างอิงออบเจกต์ที่ $elemMatch จับได้
  • $push: เพิ่มออบเจกต์ใหม่เข้าไปในอาร์เรย์ ListOfMailId

วิธีนี้ปลอดภัยกว่าใช้ index ตรงๆ เพราะไม่ต้องกังวลลำดับของอาร์เรย์เปลี่ยนไป