Node.js 如何提高mongodb长时间运行查询的性能

Node.js 如何提高mongodb长时间运行查询的性能,node.js,mongodb,mongoose,mongodb-query,mongoose-schema,Node.js,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,我是mongoDb的新手,我正在尝试为每个记录更新大约10到15k条记录的字段。当我试图更新整个数据库中的查询块记录时,运行的查询将允许我执行任何读或写操作,直到查询执行完成。是否有任何方法可以提高此类查询的性能 这是我的密码: var ExisitingData=[{"isActive" : true, "barcode" : "8908001921015", "mrp" : 2000, }, {"isActive" : true, "barcode"

我是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);
    });
};

尝试
async.eachLimit(ExistingData,10,函数(item,innerCallback){
不要将所有数据加载到一个数组中,而是处理流。运行批量操作以减少写入和响应开销。@NeilLunn您好,请举一个例子。在您的问题中,我不知道您刚刚标记为15k长数组的
现有数据来自何处。第一个p这一过程的艺术需要从以有效方式从任何来源读取数据开始,然后将其传递给更新操作。因此,您可以从解释数据来源开始。Web API?CSV?等。@NeilLunn数据源来自CSV