gpt4 book ai didi

javascript - Mongoose 批量保存/异步更新每次只更新一些文档

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:34 25 4
gpt4 key购买 nike

我正在尝试使用用户提交的表单的内容执行批量更新。每次提交都会更新所提交文档的可变子集。看起来最终的回调基本上是在所有异步操作完成之前被调用的,但我不知道如何解决它。我也用 async.eachSeries 尝试过,但错误是相同的。

    // updates is a list of object ids    
Items.model.find ({
_id: {$in: updates}
})
.exec (function (err, found) {
console.log (found);
// 'found' contains the expected submissions
for (var i = 0; i < found.length; i++) {
console.log (found [i]._id);
found [i].category = ObjectId (req.body [found [i]._id]);
found [i].state = 'submitted';
}

// 'found' now shows the desired updates correctly
console.log (found);
async.eachSeries (found, function (item, next) {
console.log (item);
//each item appears to contain the desired updates
item.save (function (err) {
if (err) return next (err);
return next ();
});
}, function (err) {
console.log (err);
console.log ("done");
return res.redirect ('/dataview/' + locals.app.name + "/" + req.body.page);
});
});

在上述所有内容的最后,如果我们重新访问该页面,显然只有文档的子集实际上被更新和存储。我绞尽脑汁试图找出原因。

最佳答案

您可以使用async.eachOfSeries 在单次迭代中完成,而不是两次

// updates is a list of object ids    
Items.model.find({
_id: {
$in: updates
}
})
.exec(function (err, found) {
console.log(found);
// 'found' contains the expected submissions
async.eachOfSeries(found, function (item, i, next) {
item.category = ObjectId(req.body[item._id]);
item.state = 'submitted';
console.log(item);
//each item appears to contain the desired updates
item.save(next);
}, function (err) {
console.log(err);
console.log("done");
return res.redirect('/dataview/' + locals.app.name + "/" + req.body.page);
});
});

但是我建议您使用Promise.all函数并直接更新,而不是查找并更新

const itemList = [];
for (var i = 0; i < updates.length; i++) {
itemList.push(Items.model.update({
_id: updates[i]
}, {
$set: {
state: 'submitted',
category: ObjectId(req.body[updates[i]])
}
}));
}
Promise.all(itemList)
.then((items) => {
console.log('success');
return res.redirect('/dataview/' + locals.app.name + '/' + req.body.page);
})
.catch((err) => {
console.log('error ', err);
return res.redirect('/dataview/' + locals.app.name + '/' + req.body.page);
});

关于javascript - Mongoose 批量保存/异步更新每次只更新一些文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50325453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com