Node.js mongo更新在异步eachseries中不起作用
我使用async 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
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}-如果不这样做,可能会在更新发生之前调用回调。