MongoDB में $elemMatch और पोजीशनल $ से नेस्टेड ऐरे एलिमेंट हटाना
नेस्टेड ऐरे (ऐरे के अंदर ऐरे) से विशिष्ट एलिमेंट हटाने के लिए $elemMatch से पैरेंट ऐरे एलिमेंट पहचानें, फिर पोजीशनल $ के साथ $pull उपयोग करें।
कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें
> db.pullWithPositionalOperatorDemo.insertOne({
_id: 100,
"StudentDetails": [
{"StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"]},
{"StudentId": "STU-2", "StudentFavouriteSubject": ["PHP", "MySQL"]}
]
});
{ "acknowledged": true, "insertedId": 100 }
डॉक्यूमेंट देखें
> db.pullWithPositionalOperatorDemo.find().pretty();
{
"_id": 100,
"StudentDetails": [
{"StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"]},
{"StudentId": "STU-2", "StudentFavouriteSubject": ["PHP", "MySQL"]}
]
}
STU-2 के StudentFavouriteSubject से "MySQL" हटाएं
> db.pullWithPositionalOperatorDemo.update({
"StudentDetails": {
$elemMatch: {
"StudentId": "STU-2",
"StudentFavouriteSubject": "MySQL"
}
}
}, {
$pull: {
"StudentDetails.$.StudentFavouriteSubject": "MySQL"
}
}, {
multi: true
});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
हटाने के बाद चेक करें
> db.pullWithPositionalOperatorDemo.find().pretty();
{
"_id": 100,
"StudentDetails": [
{"StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"]},
{"StudentId": "STU-2", "StudentFavouriteSubject": ["PHP"]}
]
}
चरण-दर-चरण
$elemMatch- StudentDetails ऐरे में वह एलिमेंट ढूंढता है जहां StudentId="STU-2" और StudentFavouriteSubject में "MySQL" होStudentDetails.$- पोजीशनल ऑपरेटर, मैच हुए एलिमेंट (दूसरा) को रिप्रेजेंट करता है$pull: {"StudentDetails.$.StudentFavouriteSubject": "MySQL"}- उस एलिमेंट के नेस्टेड ऐरे से "MySQL" हटाता है
महत्वपूर्ण
$elemMatchके बिना, क्वेरी अलग-अलग एलिमेंट पर मैच कर सकती थीmulti: true- सभी मैचिंग डॉक्यूमेंट अपडेट (यहां एक ही डॉक्यूमेंट)- आधुनिक:
updateOne()याupdateMany()उपयोग करें