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

नेवला बहु अद्यतन

मान लें कि आपके पास वस्तुओं की एक सरणी थी जिसे आप अपने संग्रह में मिलान आईडी पर अपडेट करना चाहते थे जैसे

var soldItems = [
        {
            "_id": 1,
            "value": 4
        },
        {
            "_id": 2,
            "value": 27
        }
    ];

तब आप <का उपयोग कर सकते हैं कोड>प्रत्येक के लिए () इसे पुनरावृत्त करने और अपने संग्रह को अपडेट करने के लिए सरणी पर विधि:

soldItems.forEach(function(item)){
    Model.update({"_id": item._id}, {"$set": {"value": item.value }}, callback);
});

या वादों को

. के रूप में उपयोग करें
var updates = [];
soldItems.forEach(function(item)){
    var updatePromise = Model.update({"_id": item._id}, {"$set": {"value": item.value }});
    updates.push(updatePromise);
});

Promise.all(updates).then(function(results){
    console.log(results);
});

या map का उपयोग कर रहे हैं ()

var updates = soldItems.map(function(item)){
    return Model.update({"_id": item._id}, {"$set": {"value": item.value }});       
});

Promise.all(updates).then(function(results){
    console.log(results);
}); 

बड़े सरणियों के लिए, आप बेहतर प्रदर्शन के लिए बल्क राइट एपीआई का उपयोग करने का लाभ उठा सकते हैं। नेवला संस्करणों के लिए >=4.3.0 जो MongoDB सर्वर 3.2.x . का समर्थन करते हैं ,आप उपयोग कर सकते हैं कोड>बल्कराइट () अपडेट के लिए। निम्न उदाहरण दिखाता है कि आप इस बारे में कैसे जा सकते हैं:

var bulkUpdateCallback = function(err, r){
    console.log(r.matchedCount);
    console.log(r.modifiedCount);
}
// Initialise the bulk operations array
var bulkOps = soldItems.map(function (item) { 
    return { 
        "updateOne": { 
            "filter": { "_id": item._id } ,              
            "update": { "$set": { "value": item.value } } 
        }         
    }    
});

// Get the underlying collection via the native node.js driver collection object
Model.collection.bulkWrite(bulkOps, { "ordered": true, w: 1 }, bulkUpdateCallback);

नेवला संस्करणों के लिए ~3.8.8, ~3.8.22, 4.x जो MongoDB सर्वर का समर्थन करते हैं >=2.6.x , आप बल्क API का उपयोग कर सकते हैं इस प्रकार है

var bulk = Model.collection.initializeOrderedBulkOp(),
    counter = 0;

soldItems.forEach(function(item) {
    bulk.find({ "_id": item._id }).updateOne({ 
        "$set": { "value": item.value }
    });

    counter++;
    if (counter % 500 == 0) {
        bulk.execute(function(err, r) {
           // do something with the result
           bulk = Model.collection.initializeOrderedBulkOp();
           counter = 0;
        });
    }
});

// Catch any docs in the queue under or over the 500's
if (counter > 0) {
    bulk.execute(function(err,result) {
       // do something with the result here
    });
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB और समग्र प्राथमिक कुंजी

  2. मोंगोस्किन के संबंध में सुरक्षित:सही और सुरक्षित:गलत में क्या अंतर है? और इसका उपयोग कैसे करें?

  3. MongoDB:विभिन्न फाइलों में परिभाषित विभिन्न संग्रहों के लिए उप-दस्तावेज़ के रूप में एक स्कीमा का उपयोग कैसे करें

  4. निर्यात प्रणाली। MongoDB से प्रोफ़ाइल काम नहीं करती है

  5. मोंगोडब-गो-ड्राइवर में, एक संरचना में मार्शल/अनमर्शल बीएसओएन कैसे करें