遍历猫鼬文档,更新和保存

我正在尝试遍历对象数组,其中每个对象都包含猫鼬文档的唯一标识符及其“可用”数量:[{sku:“ ABCD”,可用:5}]。在每个循环中,我将在MongoDB中定位文档,更新“ available”属性,然后保存文档。这似乎造成了异步的噩梦,因为在服务器将响应发送回前端之前,.forEach循环似乎没有完成。

我一直在尝试使用async / await解决问题,但显然不了解在何时何地使用它们。

var Product = require("../models/models").Product;

const rows = [ { sku: 'ABCD',available: '12' },{ sku: 'EFGH',available: '42' },{ sku: 'IJKL',available: '33' } ];

const updateRows = async _rows => {
    let _rowsUpdated = 0;
    _rows.forEach(async row => {
      await Product.findOne({ sku: row.sku },async (err,_prod) => {
        if (err) {
          return console.log(err);
        }
        _prod.available = row.available;
        const res = await _prod.save();
        if (res) _rowsUpdated++;
      });
    });
    return _rowsUpdated;
  };

const rowsUpdated = await updateRows(rows);
console.log(rowsUpdated);

所有这些都包装在异步router.post()回调中。

当记录rowsUpdated时,它返回零,但是我希望它返回3,因为在updateRows()函数完成之前,它不应该移动通过该行。

tong19871029 回答:遍历猫鼬文档,更新和保存

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162529.html

大家都在问