Node.js 如何提高mongodb长时间运行查询的性能
我是mongoDb的新手,我正在尝试为每个记录更新大约10到15k条记录的字段。当我试图更新整个数据库中的查询块记录时,运行的查询将允许我执行任何读或写操作,直到查询执行完成。是否有任何方法可以提高此类查询的性能 这是我的密码: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"
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