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

कैसे निर्धारित करें कि $addToSet ने वास्तव में एक MongoDB दस्तावेज़ में एक नया आइटम जोड़ा है या यदि आइटम पहले से मौजूद है?

बेशक आप यहां जो कर रहे हैं वह वास्तव में प्रतिक्रिया की जांच कर रहा है जो इंगित करता है कि कोई दस्तावेज़ अपडेट किया गया था या डाला गया था या वास्तव में कोई ऑपरेशन नहीं हुआ था। $addToSet . के लिए यह आपका सबसे अच्छा संकेतक है अद्यतन करने के लिए दस्तावेज़ को तब अद्यतन किया जाएगा।

$addToSet ऑपरेटर स्वयं डुप्लीकेट नहीं बना सकता, यह ऑपरेटर की प्रकृति है। लेकिन आपको वास्तव में अपने तर्क के साथ कुछ समस्याएँ हो सकती हैं:

{                                                
      "$addToSet", new BsonDocument()
           {
                { "items", new BsonDocument()
                     {
                          { "id", item.Id },
                          { "v", item.Value } 
                     }
                }
           }
 }

तो स्पष्ट रूप से आप दिखा रहे हैं कि आपके "सेट" में एक आइटम दो क्षेत्रों से बना है, इसलिए यदि वह सामग्री किसी भी तरह से भिन्न होती है (यानी एक ही आईडी लेकिन अलग मूल्य) तो आइटम वास्तव में सेट का "अद्वितीय" सदस्य है और होगा जोड़ा जाना। उदाहरण के लिए $addToSet . के लिए कोई रास्ता नहीं होगा एक विशिष्ट पहचानकर्ता के रूप में "आईडी" के आधार पर पूरी तरह से नए मान नहीं जोड़ने के लिए ऑपरेटर। आपको वास्तव में इसे कोड में रोल करना होगा।

डुप्लिकेट के रूप के लिए यहां दूसरी संभावना यह है कि आपका क्वेरी भाग उस दस्तावेज़ को सही ढंग से नहीं ढूंढ रहा है जिसे अपडेट किया जाना है। इसका परिणाम एक नया दस्तावेज़ बनाना होगा जिसमें "सेट" में केवल नया निर्दिष्ट सदस्य शामिल है। तो एक सामान्य उपयोग की गलती कुछ इस प्रकार है:

db.collection.update(
    { 
        "id": ABC,
        "items": { "$elemMatch": {
            "id": 123, "v": 10
         }},
    {
        "$addToSet": {
            "items": {
                "id": 123, "v": 10
            }
        }
    },
    { "upsert": true }
)

उस तरह के ऑपरेशन का परिणाम हमेशा एक नया दस्तावेज़ बनाएगा क्योंकि मौजूदा दस्तावेज़ में "सेट" में निर्दिष्ट तत्व नहीं था। सही कार्यान्वयन नहीं . करना है "सेट" सदस्य की उपस्थिति की जांच करें और $addToSet . को अनुमति दें काम करने के लिए।

यदि वास्तव में आपके पास सत्य . है "सेट" में होने वाली डुप्लिकेट प्रविष्टियां जहां उप-दस्तावेज़ के सभी तत्व बिल्कुल समान हैं, तो यह किसी अन्य कोड या तो मौजूद या अतीत में हुआ है।

जहां आप सुनिश्चित हों कि नई प्रविष्टियां बनाई जा रही हैं, वहां $push के उदाहरणों के लिए कोड देखें या वास्तव में और कोड में सरणी हेरफेर जो एक ही क्षेत्र पर कार्य करता प्रतीत होता है।

लेकिन अगर आप ऑपरेटर का सही इस्तेमाल कर रहे हैं तो $addToSet ठीक वही करता है जो करने का इरादा है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या MongoDB के $mod क्वेरी ऑपरेटर के लाभांश और भाजक को स्विच करना संभव है?

  2. एक मोंगोडब संग्रह को डुप्लिकेट करें

  3. नेवला findOneAndUpdate Upsert _id null?

  4. गतिशील के रूप में क्वेरी मोंगोडब संग्रह

  5. Mongoose का उपयोग करके MongoDB दस्तावेज़ से एक कुंजी हटाएं