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

क्या यह मोंगोडब में वस्तुओं की एक सरणी डालने और अद्यतन करने का एक सुरक्षित तरीका है?

bulkWrite अद्यतन करने के लिए एपीआई इसे बेहतर तरीके से संभालता है

mongodb.connect(mongo_url, function(err, db) {
    if(err) console.log(err)
    else {
        var mongo_products_collection = db.collection("products")

        mongoUpsert(mongo_products_collection, data_products, function() {
            db.close()
        })
    }
})

function mongoUpsert(collection, data_array, cb) {

    var bulkUpdateOps = data_array.map(function(data) {
        return {
            "updateOne": {
                "filter": { 
                    "product_id": data.product_id,
                    "post_modified": { "$ne": data.post_modified }
                },
                "update": { "$set": data },
                "upsert": true
            }
        };
    });

    collection.bulkWrite(bulkUpdateOps, function(err, r) {
        // do something with result
    });

    return cb(false);
}

यदि आप बड़े सरणियों के साथ काम कर रहे हैं यानी> 1000 तो 500 के बैच में सर्वर को लिखने पर विचार करें जो आपको बेहतर प्रदर्शन देता है क्योंकि आप सर्वर को हर अनुरोध नहीं भेज रहे हैं, हर 500 अनुरोधों में सिर्फ एक बार।

थोक संचालन के लिए MongoDB एक डिफ़ॉल्ट आंतरिक सीमा लगाता है प्रति बैच 1000 ऑपरेशनों में से और इसलिए 500 दस्तावेज़ों का चुनाव इस अर्थ में अच्छा है कि मोंगोडीबी को डिफ़ॉल्ट लागू करने के बजाय बैच आकार पर आपका कुछ नियंत्रण है, यानी> 1000 दस्तावेज़ों के परिमाण में बड़े संचालन के लिए। तो उपरोक्त मामले के लिए पहले दृष्टिकोण में कोई भी एक बार में सभी सरणी लिख सकता है क्योंकि यह छोटा है लेकिन 500 विकल्प बड़े सरणी के लिए है।

var ops = [],
    counter = 0;

data_array.forEach(function(data) {
    ops.push({
        "updateOne": {
            "filter": { 
                "product_id": data.product_id, 
                "post_modified": { "$ne": data.post_modified } 
            },
            "update": { "$set": data },
            "upsert": true
        }
    });
    counter++;

    if (counter % 500 == 0) {
        collection.bulkWrite(ops, function(err, r) {
            // do something with result
        });
        ops = [];
    }
})

if (counter % 500 != 0) {
    collection.bulkWrite(ops, function(err, r) {
        // do something with result
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. त्रुटि:नेवला का उपयोग करके MongoDb एटलस से कनेक्ट करते समय queryTxt ETIMEOUT

  2. डिस्क पर डेटाबेस का आकार mongoimport CSV फ़ाइल के गुणक के रूप में बढ़ता है?

  3. नेवला खाली सरणियाँ बना रहा है?

  4. ग्रिडएफएस (मोंगोडीबी) के लिए कस्टम स्टोरेज सिस्टम?

  5. पाइमोंगो बल्क इंसर्ट्स