如何提高mongodb长期运行查询的性能

时间:2017-05-30 18:44:13

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我是mongoDb的新用户,我正在尝试为每条记录更新大约10到15k记录的字段。当我试图更新记录时,查询会阻塞整个数据库,运行查询将允许我执行任何读取或写入操作,直到查询执行完成,无论如何都有提高此类查询的性能。

这是我的代码:

var ExisitingData=[{"isActive" : true, 
    "barcode" : "8908001921015",     
    "mrp" : 2000, 
},
{"isActive" : true, 
    "barcode" : "7808001921019",     
    "mrp" : 1000, 
}
....15k]
var updatedRsult=[];
    async.forEach(ExisistingData, function (item, innerCallback) {
        exports.populateData(item, function (err, populatedResult) {
            if (err) {
                innerCallback(err);
            }
            if(populatedResult==true)
                totalRecordsUpdated++;
            else
                totalIgnoredRecords++;
            innerCallback();

        });
    }, function (err) {
        console.log("FinalDone");
        var h1={}
        h1['totalRecordsUpdated'] = totalRecordsUpdated;
        h1['totalIgnoredRecords'] = totalIgnoredRecords;
        updatedResult.push(h1);
        updateCheck(null, updatedResult);
    });




exports.populateData=function(item, mainCallback) {
    var updated = false;
    async.parallel([
        function (callback1) {
            Test.update({
                $and: [
                    {'barcode': item['barcode']},
                    {'mrp': {$lt: parseInt(item['mrp'])}}
                ]
            }, {$set: {'mrp': parseInt(item['mrp'])}}, function (err, result) {
                if (err) {
                    console.log(err);
                    callback1();
                }

                else {
                    if (result['nModified'] == 1) {
                        console.log("Its Updated");
                        console.log(item);

                       updated=true;
                        callback1()
                    }
                    else {
                        callback1()
                    }
                }

            });
        }

    ], function done(err) {
        mainCallback(null,updated);
    });
};

0 个答案:

没有答案