我想运行一个mongoose查询循环来基于名为dateStarts的数组更新数据库。然后,我想执行一个最终命令,但我希望它在所有更新之后使用数据库。如上所述,最终查询似乎在循环完成之前运行。我该如何解决这个问题?
dateStarts.forEach(function(datevalue)
{
var conditions = {//conditions};
var update = {//updates};
titleRecords.update(conditions, update, options, function(err, data)
{
if (err) throw err;
});
}) //end of forEach loop
titleRecords.remove({//finalcondition});
答案 0 :(得分:0)
函数update
是一个异步操作,这就是为什么remove
在更新之前执行的原因。您可以构建一个promises数组,并在执行删除之前使用Promise.all
来解析所有更新:
var updatePromises = dateStarts.map((datevalue) => {
var conditions = {//conditions};
var update = {//updates};
return titleRecords.update(conditions, update, options);
});
Promise.all(updatePromises)
.then(() => titleRecords.remove({//finalcondition}))
.catch((error) => ...);
要让mongoose使用原生承诺(节点版本6或更高版本),您可以在顶部执行此操作:
mongoose.Promise = global.Promise;