Node.js 验证多个mongoose文档并更新
我们有一个mongoose模型Node.js 验证多个mongoose文档并更新,node.js,validation,mongoose,mongoose-schema,Node.js,Validation,Mongoose,Mongoose Schema,我们有一个mongoose模型Offer,它有一个名为activatedDate和expirationDate的字段 在pre-validate钩子中,我有我的验证逻辑,如果expirationDate小于activatedDate,则会抛出错误。(这只是一个示例,我们有多个字段正在根据其他字段的记录值进行验证) 通过这样做,我可以验证并插入/更新单个报价文档。 到目前为止还不错 现在,我们想实现一个新功能来多编辑提供模型。这样我们的用户就不必一个接一个地用相同的值更新相同的字段 请记住,我们期
Offer
,它有一个名为activatedDate
和expirationDate
的字段
在pre-validate钩子中,我有我的验证逻辑,如果expirationDate
小于activatedDate
,则会抛出错误。(这只是一个示例,我们有多个字段正在根据其他字段的记录值进行验证)
通过这样做,我可以验证并插入/更新单个报价
文档。
到目前为止还不错
现在,我们想实现一个新功能来多编辑提供
模型。这样我们的用户就不必一个接一个地用相同的值更新相同的字段
请记住,我们期望在系统和理论上提供超过10k的报价。用户可以使用此功能一次更新所有内容
是否只有在验证成功后,才有最好的方法更新多个mongoose文档
我们不能先查找,然后逐个验证。要做到这一点需要很多时间
有没有最佳的方法来实现这一点?
如果我必须改变验证模型的方式,那也没关系。我愿意接受任何建议。想法1 我可以建议您将问题分为两部分: 首先使用某种方法运行验证,以避免出现内存问题 第二部分使用批量更新功能
const bulk = Offer.collection.initializeOrderedBulkOp();
bulk.find(query).update(update);
bulk.execute(function (error) {
callback(); // done
});
创意2
使用流
,mongoose支持光标
和流,您可以安全地处理数据库中的所有行,内存使用将是恒定的,但问题是它不快,它将按顺序迭代所有文档。有一次,我用不同的操作处理了一个2M的记录收集,大约花了40分钟,所以你肯定可以在这里进行优化
Offer
.find()
.cursor()
.pipe(new Writable({
objectMode: true,
write(document, encoding, next) {
// do your validation logic
document.save(() => next());
},
}))
.on('finish', () => {
done();
});
作为一种想法,你可以将你的收藏分成多个流,并以这种方式并行运行它们,这样你可以获得很多时间,但诀窍是同步所有的流