【问题标题】:execute final mongoose query after loop completes循环完成后执行最终的猫鼬查询
【发布时间】:2017-12-13 10:43:27
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    函数update 是一个异步操作,这就是为什么remove 在更新之前执行。您可以构建一组 promise 并使用 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 使用原生 Promise(节点版本 6 或更高版本),您可以在顶部执行此操作:

    mongoose.Promise = global.Promise;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2017-06-04
      • 2021-01-30
      • 2020-09-14
      • 2019-06-22
      • 2016-06-03
      • 2021-02-28
      相关资源
      最近更新 更多