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

MongoDB को समेकित और अद्यतन करें

बेहतर प्रदर्शन के लिए विशेष रूप से बड़े संग्रह के साथ काम करते समय, का उपयोग करने का लाभ उठाएं। Bulk() बल्क अपडेट के लिए एपीआई क्योंकि आप बैच में सर्वर को ऑपरेशन भेजेंगे (उदाहरण के लिए, 1000 का बैच आकार कहें) जो आपको बेहतर प्रदर्शन देता है क्योंकि आप सर्वर को हर अनुरोध नहीं भेजेंगे (जैसा कि आप वर्तमान में हैं) forEach() लूप) लेकिन हर 1000 अनुरोधों में सिर्फ एक बार, इस प्रकार आपके अपडेट को वर्तमान की तुलना में अधिक कुशल और तेज बनाते हैं।

निम्नलिखित उदाहरण इस दृष्टिकोण को प्रदर्शित करते हैं, पहला उदाहरण Bulk() एपीआई MongoDB संस्करणों में उपलब्ध है >= 2.6 and < 3.2 . यह clients . में सभी दस्तावेज़ों को अपडेट करता है nb_orders_1year . को बदलकर संग्रह एकत्रीकरण परिणामों के मूल्यों वाले फ़ील्ड।

चूंकि aggregate() विधि एक cursor लौटाती है , आप एग्रीगेशन आउटपुट संग्रह के forEach() इसे पुनरावृत्त करने और प्रत्येक दस्तावेज़ तक पहुँचने के लिए इस प्रकार बैचों में बल्क अपडेट ऑपरेशन सेट करना और फिर एपीआई के साथ कुशलतापूर्वक सर्वर पर भेजना:

var bulk = db.clients.initializeUnorderedBulkOp(),
    pipeline = [
        {
            "$match": { "date_order": { "$gt": v_date1year } }
        },
        {
            "$group": {
                "_id": "$id_client", 
                "count": { "$sum" : 1 }
            }
        },
        { "$out": "tmp_indicators" }        
    ],
    counter = 0;

db.orders.aggregate(pipeline);  
db.tmp_indicators.find().forEach(function (doc) {       
    bulk.find({ "_id": doc._id }).updateOne({ 
        "$set": { "nb_orders_1year": doc.count }
    });

    counter++;
    if (counter % 1000 == 0) {
        bulk.execute(); // Execute per 1000 operations and re-initialize every 1000 update statements
        bulk = db.clients.initializeUnorderedBulkOp();
    }
});
// Clean up remaining operations in queue
if (counter % 1000 != 0) { bulk.execute(); }

अगला उदाहरण नए MongoDB संस्करण पर लागू होता है 3.2 जिसके बाद से एपीआई और bulkWrite()

यह ऊपर के समान कर्सर का उपयोग करता है, लेकिन परिणाम को पुनरावृत्त करने के बजाय, इसके map() विधि:

 var pipeline = [
        {
            "$match": { "date_order": { "$gt": v_date1year } }
        },
        {
            "$group": {
                "_id": "$id_client", 
                "count": { "$sum" : 1 }
            }
        },
        { "$out": "tmp_indicators" }        
    ];
db.orders.aggregate(pipeline);
var bulkOps = db.tmp_indicators.find().map(function (doc) { 
        return { 
            "updateOne": { 
                "filter": { "_id": doc._id } ,              
                "update": { "$set": { "nb_orders_1year": doc.count } } 
            }         
        };
    });

db.clients.bulkWrite(bulkOps, { "ordered": true });



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PostgreSQL से MongoDB में डेटा माइग्रेट करें

  2. सरणियों के बिना नेवला पर उप-स्कीमा

  3. कई शर्तों के साथ नेवला खोजें

  4. स्प्रिंग डेटा मोंगोडीबी में मोंगोडीबी ऑब्जेक्ट आईडी से आप टाइमस्टैम्प कैसे निकालते हैं?

  5. क्षेत्र के अनुसार MongoDB समूह, इसे गिनें और इसे क्रमबद्ध करें