$pull ऑपरेटर के साथ अपडेट करना
किसी सरणी फ़ील्ड से विशिष्ट शर्त मिलान करने वाले तत्वों (दस्तावेज़ों) को हटाने के लिए update() के साथ $pull का उपयोग करें। multi: true (या updateMany()) सभी मिलान दस्तावेज़ों पर लागू करता है।
उदाहरण: सरणी ऑफ़ दस्तावेज़ के साथ संग्रह
> db.deleteDocumentsDemo.insertOne(
{
"_id": 100,
"StudentsDetails" : [
{ "StudentId": 1, "StudentName": "John" },
{ "StudentId": 2, "StudentName": "Carol" },
{ "StudentId": 3, "StudentName": "Sam" },
{ "StudentId": 4, "StudentName": "Mike" }
]
}
);
{ "acknowledged" : true, "insertedId" : 100 }
> db.deleteDocumentsDemo.insertOne(
{
"_id": 200,
"StudentsDetails" : [
{ "StudentId": 5, "StudentName": "David" },
{ "StudentId": 6, "StudentName": "Ramit" },
{ "StudentId": 7, "StudentName": "Adam" },
{ "StudentId": 8, "StudentName": "Larry" }
]
}
);
{ "acknowledged" : true, "insertedId" : 200 }
हटाने से पहले देखना
> db.deleteDocumentsDemo.find().pretty();
StudentName "David" वाले तत्व को सभी दस्तावेज़ों की सरणी से हटाना
> db.deleteDocumentsDemo.update(
{},
{ $pull: { StudentsDetails: { StudentName: "David" } } },
{ multi: true }
);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })
सत्यापन
> db.deleteDocumentsDemo.find().pretty();
आउटपुट: _id 200 वाले दस्तावेज़ की StudentsDetails सरणी से StudentId 5 (David) हटा दिया गया है। _id 100 अपरिवर्तित रहता है (क्योंकि उसमें David नहीं था)।
मुख्य बिंदु:
$pullसरणी से **मिलान करने वाले सभी** तत्वों को हटाता है (सिर्फ पहला नहीं)।multi: true(याupdateMany()) संग्रह के **सभी** दस्तावेज़ों पर ऑपरेशन लागू करता है।- आधुनिक सिंटैक्स:
db.collection.updateMany({}, { $pull: { StudentsDetails: { StudentName: "David" } } })।