समस्या यह है कि आप $
. का उपयोग नहीं कर सकते हैं एक सरणी में नेस्टेड स्तरों पर मिलान दिखाने के लिए ऑपरेटर। और सबसे महत्वपूर्ण बात यह है कि आप केवल एक बार निर्दिष्ट कर सकते हैं।
जैसा कि दस्तावेज़ीकरण
से कहा गया है , यह है कि $
होगा केवल पहले . से मिलान करें तत्व मिला। वह नहीं केवल इसका अर्थ है कि यदि आपकी क्वेरी के लिए आपके पास एकाधिक मिलान हैं तो केवल पहला ही चुना जाएगा, इसका यह भी अर्थ है कि केवल पहला मिलान सरणी स्थिति का उपयोग किया जाएगा। इसका मतलब है कि ऐसा कुछ भी काम नहीं करेगा:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 }
चूंकि यह गलती से index
. से मेल खाएगा 1
उस आइटम को महत्व दें और अपडेट करें जिसकी आप अपेक्षा नहीं कर रहे थे।
यदि आप संभवतः संपूर्ण . को अपडेट कर सकते हैं array तो निम्न कार्य करेगा:
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }
जैसा मैंने कहा, वैसा ही है, क्योंकि index
पहले . से मेल खा रहा है सरणी।
लेकिन आपके पास जो संरचना है, उसे देखते हुए, ऐसा लगता है कि आपका सबसे अच्छा विकल्प उस शीर्ष स्तरीय सरणी को उप-दस्तावेज़ के रूप में बदलना है। जब तक वास्तविकता में इसका एक सरणी होने का कोई कारण नहीं है, बजाय दो मिश्रित दस्तावेज़ प्रकार जो अब प्रतीत होते हैं।