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

วิธีเพิ่มรายการลงในอาร์เรย์ที่อยู่ภายในออบเจ็กต์ใน MongoDB


ใช้ $push กับ Dot Notation สำหรับอาร์เรย์ซ้อน

เมื่อต้องการเพิ่มข้อมูลลงในอาร์เรย์ที่อยู่ภายในออบเจ็กต์ ให้ใช้ $push ร่วมกับ dot notation ระบุพาธเต็มของอาร์เรย์

ตัวอย่างข้อมูล

> db.demo449.insertOne({
  details1: {
    details2: [{ _id: new ObjectId(), Name: "Chris" }],
    details3: [{ _id: new ObjectId(), Name: "David" }]
  }
});

แสดงข้อมูลก่อนเพิ่ม

> db.demo449.find();

ผลลัพธ์:

{ "_id": ObjectId(...), "details1": { "details2": [{ "_id": ObjectId(...), "Name": "Chris" }], "details3": [{ "_id": ObjectId(...), "Name": "David" }] } }

Query เพิ่มข้อมูลลงใน details2

> db.demo449.update(
  { _id: ObjectId("5e7a40e971f552a0ebb0a6e3") },
  { $push: { "details1.details2": { _id: ObjectId(), "Name": "Carol" } } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

ผลลัพธ์หลังเพิ่ม

{ "_id": ObjectId(...), "details1": { "details2": [{ "_id": ObjectId(...), "Name": "Chris" }, { "_id": ObjectId(...), "Name": "Carol" }], "details3": [{ "_id": ObjectId(...), "Name": "David" }] } }

จุดสำคัญ

  • ใช้ dot notation: "parent.child.arrayName"
  • $push เพิ่มข้อมูลต่อท้ายอาร์เรย์อัตโนมัติ
  • สามารถเพิ่มออบเจ็กต์สมบูรณ์พร้อม _id ใหม่ได้
  • ใช้ updateOne() หรือ updateMany() ตาม MongoDB version ใหม่แทน update()

รูปแบบใหม่ (MongoDB 3.2+)

db.demo449.updateOne(
  { _id: ObjectId("...") },
  { $push: { "details1.details2": { _id: ObjectId(), Name: "Carol" } } }
);