Node.js 验证多个mongoose文档并更新

Node.js 验证多个mongoose文档并更新,node.js,validation,mongoose,mongoose-schema,Node.js,Validation,Mongoose,Mongoose Schema,我们有一个mongoose模型Offer,它有一个名为activatedDate和expirationDate的字段 在pre-validate钩子中,我有我的验证逻辑,如果expirationDate小于activatedDate,则会抛出错误。(这只是一个示例,我们有多个字段正在根据其他字段的记录值进行验证) 通过这样做,我可以验证并插入/更新单个报价文档。 到目前为止还不错 现在,我们想实现一个新功能来多编辑提供模型。这样我们的用户就不必一个接一个地用相同的值更新相同的字段 请记住,我们期

我们有一个mongoose模型
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();
    });
作为一种想法,你可以将你的收藏分成多个流,并以这种方式并行运行它们,这样你可以获得很多时间,但诀窍是同步所有的流