mongodb批量修改数据,其实有内部方法,db.[collectionName].update({查询器},{修改器}),不是这里讨论的重点。
今天要讨论的是,异步调用的update函数改为同步,逐条更新后统一返回结果。
因为update方法是异步函数,所以要用点技巧来编写。
首先明白异步转同步大概有两种方法:async/await和then。
平常使用时两个方法都可以,但是使用async.auto,各函数串行调用时,特别是带有for循环的调用中,建议使用async/await。
function updateData (tablename, querywhere, dataset) { return new Promise((resolve) => { mongodb.update(tablename, querywhere, dataset, function (err, queryresult) { resolve({err: err, rets: queryresult}) }) }) }再通过上层封装
async function forUpdate () { let j = 1 let arr = [] for (let i = 0; i < len; i++) { if (list[i]) { const querywhere = {id: list[i].id} const dataset = {$set: { "time1": list[i].time1 * 1000, "time2": list[i].time2 * 1000 }}; const d = await updateData('tablename', querywhere, dataset) if (d.err == null) { arr.push({successful: true, failreason: "OK"}) } else { arr.push({successful: false, failreason: 'update error[1]'}) } } else { arr.push({successful: false, failreason: 'update error[0]'}) } } return arr } const rets = await forUpdate () console.log(rets)这样就能成功将异步调用的update函数改为同步,循环后统一返回结果。