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

एक ही दस्तावेज़ के विभिन्न भागों पर काम कर रहे स्थितीय $?

आपकी टिप्पणी को ध्यान में रखते हुए आप सही रास्ते पर प्रतीत होते हैं। जैसा कि आप जानते हैं, स्थितिगत $ ऑपरेटर सिर्फ एक "मान" कंटेनर है, जिसमें इंडेक्स . है आपकी क्वेरी में मेल खाने वाले पहले सरणी तत्व का।

आप "कर सकते थे" इसका उपयोग करें यदि आप बिल्कुल . थे सुनिश्चित करें कि आपकी दो सरणियाँ हमेशा तत्वों की संख्या समान थी और यह कि ये संगत प्रविष्टियाँ हर समय एक ही स्थिति में थीं।

तो हाँ, सुरक्षित रहने के लिए, $elemMatch का उपयोग करें दो . के साथ इस तरह के कार्यों को अपडेट करें

db.p.update( { '$and': [ 
  { '_searchData.addressesR': {$elemMatch: { 'street': 'BITTON' } } ] },
  { '$set': {
    '_searchData.addressesR.$.street':'BITTON CHANGED' ,
  }
})

db.p.update( { '$and': [ 
  { '_children.addressesR': {$elemMatch: { 'street': 'Bitton' } } ] },
  { '$set': {
    '_children.addressesR.$.street': 'Bitton CHANGED'
  }
})

यहां केवल वास्तविक विचार दो अपडेट के कारण है संभव कि एक पढ़ें दस्तावेज़ का सकता उन अपडेट और आपके _searchData . के बीच में हो सकता है और _children दस्तावेज़ों में समान संबंधित नहीं होंगे addressesR . में प्रविष्टियां सरणियाँ।

प्रतिकृति के साथ भी यही बात लागू होती है, क्योंकि दोनों ऑपरेशनों को फिर से चलाया जाता है माध्यमिक नोड्स द्वारा।

एक अच्छी सुविधा क्या होगी, अपडेट में $elemMatch का उपयोग करने में सक्षम होना आपकी क्वेरी का हिस्सा। इस तरह आप उस तरफ के तत्व की स्थिति के लिए पूछताछ कर रहे होंगे। लेकिन यह अभी तक मौजूद नहीं है . लेकिन 2.6 से ऊपर की ओर आप कर सकते हैं ऐसा कुछ करें:

db.runCommand({

    "update": "p",

    "updates": [
        { 
            "q": { '_children.addressesR': {$elemMatch: { 'street': 'Bitton' } },

            "u": { 
                "$set": {
                    "_children.addressesR.$.street": "Bitton CHANGED"
                }
            }
        },
        { 
            "q": { '_searchData.addressesR': {$elemMatch: { 'street': 'BITTON' } },

            "u": { 
                "$set": {
                    "_searchData.addressesR.$.street": "BITTON CHANGED"
                }
            }
        }

    ]
})

यह मैनुअल पेज में बल्क अपडेट के तहत कवर किया गया है। ।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ब्लॉग के लिए अनुशंसित डेटाबेस बैकएंड

  2. अनपेक्षित मोंगो निकास कोड 100. पुनरारंभ करना

  3. MongoDB और ElasticSearch के लिए स्प्रिंग-डेटा का संयोजन

  4. MongoDB में एक संग्रह कॉपी/क्लोन करें

  5. मोंगोडीबी $ सॉर्ट