NodeJS和MongoDB更新无法正常工作

时间:2016-05-19 09:27:55

标签: node.js mongodb race-condition

我在Node和Mongo应用程序中有这个循环。 console.log会输出所有'产品'但是,正确的名称,rank通常在数据库中未正确设置。有趣的是,如果我在程序中放置一个调试断点并逐步完成,它就可以工作。知道是否存在某种竞争条件,以及做这项工作的最佳解决方案是什么?

async.each(sortedProductsArray, function (product, callback) {
    console.log(product.name);
    var query = {
        productNo: product.productNo
    };

    var index = sortedProductsArray.indexOf(product)+1;
    var update = {
        // give it a rank
        $set: { 'rank': index }
    };

    // main products array
    products.update(query, update, callback);
});

1 个答案:

答案 0 :(得分:1)

你应该使用forEachOf,这会将索引作为第二个参数返回,例如:

async.forEachOf(['a', 'b', 'c'], function () {console.log(arguments)});

{ '0': 'a', '1': 0, '2': [Function] } { '0': 'b', '1': 1, '2': [Function] } { '0': 'c', '1': 2, '2': [Function] }

然后你应该使用这个索引而不是对你的产品集合进行另一次搜索

编辑:

当你调用products.update(查询,更新,回调);这会影响products数组,因此当你执行indexOf()(可能不存在)时可能无效,这就是排名有时不填充的原因