我有一个功能,根据一定的条件更新1000多条记录。但是当我运行这个函数时 Too many connection
只有一半记录得到更新的错误。如何使用async运行这个函数?它应该一次性更新所有记录
代码:
db.query("select *, date(login) as login_date from userRegister where logout IS NULL limit 10", function (err, user) {
if (!_.size(user))
return
var byCatId = _.groupBy(user, 'catId');
var grouppedArray = _.map(byCatId, function(array) {
return _.groupBy(array, 'login_date')
});
var i, j, k
for (i in grouppedArray) {
if (grouppedArray.hasOwnProperty(i)) {
for (j in grouppedArray[i]) {
if (grouppedArray[i].hasOwnProperty(j)) {
if (grouppedArray[i][j].length > 1) {
for(var k=0;k<grouppedArray[i][j].length;k++){
if(grouppedArray[i][j][k+1]){
var updatedLogOut = moment(grouppedArray[i][j][k+1].login).subtract(1, 'minutes').format('YYYY-MM-DD HH:mm:ss')
async.eachSeries(db.query('update userRegister set logout= ? where userId = ? and catId = ?', [updatedLogOut, 1, grouppedArray[i][j][k].userId, grouppedArray[i][j][k].catId], function (err, updatedLogout) {
if (err) {
console.log(err)
return err
}
if (!_.size(updatedLogout))
return
console.log("Updated Successfully")
return updatedLogout
})
}
}
}
}
}
}
}
})
1条答案
按热度按时间o2gm4chl1#
根据docs,第一个参数是iterable对象。您可以传递所有必须更新为第一个参数的查询数组,以及在执行每个项时处理每个项的函数。
更新的代码,未测试。
希望能有所帮助