MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDb . में एक गहरा रिकॉर्ड अपडेट कर रहा है

समस्या यह है कि आप $ . का उपयोग नहीं कर सकते हैं एक सरणी में नेस्टेड स्तरों पर मिलान दिखाने के लिए ऑपरेटर। और सबसे महत्वपूर्ण बात यह है कि आप केवल एक बार निर्दिष्ट कर सकते हैं।

जैसा कि दस्तावेज़ीकरण से कहा गया है , यह है कि $ होगा केवल पहले . से मिलान करें तत्व मिला। वह नहीं केवल इसका अर्थ है कि यदि आपकी क्वेरी के लिए आपके पास एकाधिक मिलान हैं तो केवल पहला ही चुना जाएगा, इसका यह भी अर्थ है कि केवल पहला मिलान सरणी स्थिति का उपयोग किया जाएगा। इसका मतलब है कि ऐसा कुछ भी काम नहीं करेगा:

{ $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 पहले . से मेल खा रहा है सरणी।

लेकिन आपके पास जो संरचना है, उसे देखते हुए, ऐसा लगता है कि आपका सबसे अच्छा विकल्प उस शीर्ष स्तरीय सरणी को उप-दस्तावेज़ के रूप में बदलना है। जब तक वास्तविकता में इसका एक सरणी होने का कोई कारण नहीं है, बजाय दो मिश्रित दस्तावेज़ प्रकार जो अब प्रतीत होते हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB एटलस से कनेक्ट करते समय 'त्रुटि:querySrv EREFUSED' को कैसे ठीक करें?

  2. एकाधिक आईपी पते के साथ mongod.conf bind_ip कैसे सेट करें

  3. मोंगोडब में $ लुकअप के साथ कई संग्रहों में कैसे शामिल हों?

  4. MongoDb क्षेत्रीय प्रतिकृति सेट - प्रत्येक क्षेत्र में प्राथमिक नोड?

  5. उन दस्तावेज़ों को कैसे वापस करें जहाँ दो फ़ील्ड का मान समान है