MongoDB में नेस्टेड सरणी (सरणी के अंदर सरणी) से विशिष्ट रिकॉर्ड हटाने के लिए पोजिशनल ऑपरेटर $ के साथ $pull का उपयोग करें।
उदाहरण
दो-स्तरीय नेस्टेड सरणी वाला दस्तावेज़ बनाएं:
> db.deletingSpecificRecordDemo.insertOne(
{
"StudentDetails": [
{
"StudentName": "John",
"StudentSubjectDetails": [
{"Subject": "MongoDB", "Marks": 45},
{"Subject": "MySQL", "Marks": 67}
]
}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cf2210ab64a577be5a2bc06") }
दस्तावेज़ देखें:
> db.deletingSpecificRecordDemo.find().pretty();
{ "_id" : ObjectId("5cf2210ab64a577be5a2bc06"), "StudentDetails" : [ { "StudentName" : "John", "StudentSubjectDetails" : [ { "Subject" : "MongoDB", "Marks" : 45 }, { "Subject" : "MySQL", "Marks" : 67 } ] } ] }
Marks 45 वाला विषय हटाएं
> 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();
{ "_id" : ObjectId("5cf2210ab64a577be5a2bc06"), "StudentDetails" : [ { "StudentName" : "John", "StudentSubjectDetails" : [ { "Subject" : "MySQL", "Marks" : 67 } ] } ] }
व्याख्या:
StudentDetails.StudentName: "John"- बाहरी सरणी में सही ऑब्जेक्ट ढूंढता हैStudentDetails.$.StudentSubjectDetails-$पोजिशनल ऑपरेटर मिले हुए बाहरी तत्व को संदर्भित करता है$pullआंतरिक सरणी से मेल खाने वाला ऑब्जेक्ट हटा देता है
आधुनिक सिंटैक्स (MongoDB 3.6+) - arrayFilters:
db.collection.updateOne(
{_id: ObjectId("...")},
{$pull: {"StudentDetails.$[outer].StudentSubjectDetails": {Marks: 45}}},
{arrayFilters: [{"outer.StudentName": "John"}]}
);
यह अधिक पठनीय और लचीला है, विशेष रूप से गहरी नेस्टिंग के लिए।