循环完成后执行最终的mongoose查询

时间:2017-07-09 18:07:10

标签: node.js mongodb mongoose

我想运行一个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});

1 个答案:

答案 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;