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

ลบเรคคอร์ดเฉพาะจากอาร์เรย์ซ้อนในอาร์เรย์อีกชั้นใน MongoDB

ใช้ตัวดำเนินการ $pull ร่วมกับ positional operator เพื่อลบเรคคอร์ดเฉพาะจากอาร์เรย์ที่ซ้อนอยู่ในอาร์เรย์อีกชั้น เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:

> db.deletingSpecificRecordDemo.insertOne(
  {
    "StudentDetails": [
      {
        "StudentName": "John",
        "StudentSubjectDetails": [
          { "Subject": "MongoDB", "Marks":45 },
          { "Subject": "MySQL", "Marks":67 }
        ]
      }
    ]
  }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cf2210ab64a577be5a2bc06") }

แสดงเอกสาร:

> db.deletingSpecificRecordDemo.find().pretty();

คิวรี่ลบรายวิชาที่มี Marks = 45 (MongoDB) จาก StudentSubjectDetails ของนักเรียนชื่อ John:

> db.deletingSpecificRecordDemo.update(
  {"_id": ObjectId("5cf2210ab64a577be5a2bc06"), "StudentDetails.StudentName" : "John"},
  { "$pull": {"StudentDetails.$.StudentSubjectDetails" : { "Marks":45 }}},
  {multi: true}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ตรวจสอบเอกสารอีกครั้ง:

> db.deletingSpecificRecordDemo.find().pretty();

คำอธิบาย: ใช้ StudentDetails.$.StudentSubjectDetails โดย $ (positional operator) จะอ้างถึงตำแหน่งของออบเจกต์ใน StudentDetails ที่จับคู่กับ "StudentName": "John" จากนั้น $pull จะลบองค์ประกอบที่มี Marks: 45 ออกจากอาร์เรย์ StudentSubjectDetails