Node.js mongo更新在异步eachseries中不起作用

Node.js mongo更新在异步eachseries中不起作用,node.js,mongodb,Node.js,Mongodb,我使用async eachSeries迭代数组并更新集合 coll.find().toArray(function (err, doc) { async.eachSeries(doc, function (obj, cb) { var arrayLength = headerval.length; var total = 0; for (var j = 0; j < arrayLength; j

我使用async eachSeries迭代数组并更新集合

coll.find().toArray(function (err, doc) {
    async.eachSeries(doc,
        function (obj, cb) {
            var arrayLength = headerval.length;
            var total = 0;
            for (var j = 0; j < arrayLength; j++) {
                var val = headerval[j];
                total += obj[val];

            }
            console.log(total)
            obj[newcolumn] = total;
            var oId = obj['_id']
            delete obj['_id']
            coll.update({
                _id: oId
            }, {
                $set: obj
            }, {
                upsert: true,
                multi: true
            }, function (err, result) {
                console.log(result)
                cb(err);
            });
        },
        function (err) {

        }
    );
});
console.logtotal和console.logobj正在打印预期结果

console.logresult正在打印1,如果我打印结果,它将打印null。但该收藏没有得到更新

doc是mongo查找的结果。
headerVal包含一个在doc

中可用的密钥列表,因为您正在对ID进行更新。我认为只能找到并更新一个文档,因为在更新之前,查找只返回一个文档。@Jayram:Yes true。但是每一个文件都应该更新,对吗?但这里只更新了一个。即使我在每一个案例中都得到了不同的total、obj和oId,doc是游标吗?如果是,则从游标项获取实际文档是一个异步操作。尝试使用本机游标迭代器,这可能是您的问题@joao doc是另一个查找查询coll.find.toArrayfunction err,doc{由于使用了toArray,因此它不是光标。在更新选项中添加safe:true。{upsert:true,multi:true,safe:true}-如果不这样做,可能会在更新发生之前调用回调。