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

एक MongoDB दस्तावेज़ में एक डबल-नेस्टेड सरणी से किसी तत्व को निकालने का तरीका।

विचाराधीन आइटम को हटाने के लिए आप वास्तव में एक अपडेट का उपयोग करने जा रहे हैं। अधिक विशेष रूप से आप $pull . के साथ एक अपडेट करने जा रहे हैं कमांड जो आइटम को ऐरे से हटा देगा।

db.temp.update(
  { _id : "777" },
  {$pull : {"someArray.0.someNestedArray" : {"name":"delete me"}}}
)

यहाँ थोड़ा सा "जादू" हो रहा है। .0 . का उपयोग करना इंगित करता है कि हम जानते हैं कि हम someArray . के 0वें आइटम को संशोधित कर रहे हैं . {"name":"delete me"} . का उपयोग करना इंगित करता है कि हम सटीक डेटा जानते हैं जिसे हम निकालने की योजना बना रहे हैं।

यदि आप क्लाइंट में डेटा लोड करते हैं और फिर अपडेट करते हैं तो यह प्रक्रिया ठीक काम करती है। यदि आप इन कार्यों को करने वाली "सामान्य" क्वेरी करना चाहते हैं तो यह प्रक्रिया कम अच्छी तरह से काम करती है।

मुझे लगता है कि यह पहचानना सबसे आसान है कि उप-दस्तावेज़ों के सरणी को अद्यतन करने के लिए आम तौर पर यह आवश्यक है कि आपके पास किसी बिंदु पर स्मृति में मूल हो।

नीचे दी गई पहली टिप्पणी के जवाब में, आप शायद डेटा संरचना को थोड़ा बदलकर अपनी स्थिति में मदद कर सकते हैं

"someObjects" : {
  "name1":  {
        "someNestedArray" : [
            {
                "name" : "value"
            },
            {
                "name" : "delete me"
            }
        ]
    }
}

अब आप {$pull : { "someObjects.name1.someNestedArray" : ... कर सकते हैं

यहाँ आपकी संरचना के साथ समस्या है। मोंगोडीबी के पास "उप-सरणी" में हेरफेर करने के लिए बहुत अच्छा समर्थन नहीं है। आपकी संरचना में वस्तुओं की एक सरणी है और उन वस्तुओं में अधिक वस्तुओं की सरणियाँ हैं।

यदि आपके पास निम्न संरचना है, तो आपको $pull . जैसी चीज़ों का उपयोग करने में कठिनाई होगी :

array [
  { subarray : array [] },
  { subarray : array [] },
]

अगर आपकी संरचना ऐसी दिखती है और आप subarray को अपडेट करना चाहते हैं आपके पास दो विकल्प हैं:

  1. अपनी संरचना बदलें ताकि आप $pull leverage का लाभ उठा सकें ।
  2. $pull का उपयोग न करें . संपूर्ण ऑब्जेक्ट को क्लाइंट में लोड करें और findAndModify . का उपयोग करें ।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. यूरोपीय संघ के क्षेत्र में AWS पर भौगोलिक रूप से वितरित MongoDB क्लस्टर

  2. MongoDb कनेक्शन अस्वीकृत

  3. क्या mongorestore अलग-अलग तर्कों के बजाय एकल url तर्क ले सकता है?

  4. शर्त के साथ MongoDB अद्यतन

  5. दिनांक को मिलीसेकंड से ISODate ऑब्जेक्ट में बदलें