आप "दस्तावेज़" से मेल खाने के लिए कुछ निर्दिष्ट करके और फिर आवश्यक "शिफ्ट" सरणी प्रविष्टि को .update()
के लिए क्वेरी अभिव्यक्ति के रूप में निर्दिष्ट करके ऐसा कर सकते हैं। . फिर स्थितिगत $
लागू करें ऑपरेटर
$pull
के साथ सुमेलित सरणी अनुक्रमणिका के लिए
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
इस उदाहरण में यह ठीक है क्योंकि आप केवल नेस्टेड संरचना में "बाहरी" सरणी पर "मिलान" करने का प्रयास कर रहे हैं और $pull
हटाने के लिए सरणी प्रविष्टि की पहचान करने के लिए स्वयं के क्वेरी तर्क हैं।
यद्यपि आपको "नेस्टेड सरणी" का उपयोग करके वास्तव में सावधान रहना चाहिए। जबकि एक $pull
इस तरह का ऑपरेशन काम करता है, "आंतरिक" सरणी के अपडेट वास्तव में संभव नहीं हैं क्योंकि स्थितीय $
ऑपरेटर
केवल "पहले" तत्व से मेल खाएगा जो शर्त को पूरा करता है। तो कई पारियों में "मैरी मैक" का आपका उदाहरण केवल पहली "शिफ्ट" सरणी प्रविष्टि से मेल खाएगा।