ใช้ตัวดำเนินการ $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