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

मोंगोडब में एक सरणी में सभी तत्वों को अपडेट करें

जैसा कि उल्लेख किया गया है, यहां मुख्य मुद्दा स्थितीय ऑपरेटर के साथ कई तत्वों पर अपडेट के साथ है जैसा कि इस लंबे समय तक चलने वाले मुद्दे में दर्ज किया गया है:http://jira.mongodb.org/browse/SERVER-1243

इसलिए मूल मामला यह है कि कोई एकल निष्पादन ऐसा नहीं कर सकता है, इसलिए कई सरणी तत्वों के लिए प्रक्रिया करने के लिए आपको यह निर्धारित करने की कुछ विधि की आवश्यकता है कि आपको प्रत्येक तत्व के लिए एक अपडेट स्टेटमेंट को अपडेट करने और संसाधित करने के लिए कितने तत्वों की आवश्यकता है।

इसके लिए एक सरल तरीका आम तौर पर बल्क ऑपरेशंस का उपयोग करना है। सर्वर के लिए एकल अनुरोध और प्रतिक्रिया के रूप में "मल्टीपल" अपडेट ऑपरेशंस को संसाधित करने के लिए:

var bulk = db.collection.initializeOrderedBulkOp(),
    count = 0;

db.collection.find({ "name": "John Doe", "adds.status": "PENDING" }).forEach(function(doc) { 
    doc.adds.filter(function(add){ return add.status = "PENDING" }).forEach(function(add) {
        bulk.find({ "_id": doc._id, "adds.status": "PENDING" }).updateOne({
            "$set": { "adds.$.status": "APPROVED" }
        });
        count++;

        // Execute once in 1000 statements created and re-init
        if ( count % 1000 == 0 ) {
            bulk.execute();
            bulk = db.collection.initializeOrderedBulkOp();
        }
    });
});

// Execute any pending operations
if ( count % 1000 != 0 )
    bulk.execute();

यदि आपके अपडेट किए गए दस्तावेज़ काफी छोटे हैं, या वास्तव में केवल एक ही दस्तावेज़ है तो आप count . को छोड़ सकते हैं आवश्यक लूप में सभी बल्क अपडेट की जांच करें और उन्हें सरलता से संलग्न करें और सभी लूपों के अंत में बस एक बार निष्पादित करें।

एक लंबी व्याख्या और विकल्प एकाधिक सरणी तत्वों को कैसे अपडेट करें पर पाए जा सकते हैं। , लेकिन सभी एक स्थितीय $ मिलान किए गए प्रत्येक दस्तावेज़ के लिए या जब तक कोई और संशोधित दस्तावेज़ वापस नहीं किया जाता है, तब तक कई बार अपडेट करें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो डीबी:उबंटू में एक शार्डिंग क्लस्टर बनाने में असमर्थ

  2. यदि कोई फ़ील्ड मौजूद नहीं है, तो mongodb अद्यतन करें

  3. MongoDB में साझा करना

  4. कैसे एक POJO में MongoDB से प्राप्त json दस्तावेज़ deserialize करने के लिए? (मॉर्फिया से जावा मोंगो ड्राइवर 3.0 के लिए पलायन)

  5. क्या AWS DocumentDB एक ही प्रश्न में 3+ संग्रह में शामिल होने का समर्थन करता है?