【问题标题】:Parallel save error in mongoose post init hook. Can't save() the same doc multiple times in parallelmongoose post init 挂钩中的并行保存错误。无法并行保存()同一个文档
【发布时间】:2020-04-05 02:55:01
【问题描述】:

所以这是我在使用 post init 挂钩时遇到的一个问题,每当日期更改时我会更新数据库中的一些值。但是当我尝试进行 get 调用时,出现了并行保存错误,但是数据库中的值得到更新,如果我再次尝试点击 api,它工作得非常好,那么为什么我只得到这个并行保存错误一次而不是直到日期再次更改。

influencerSchema.post('init', async function (doc) {
  let metaData = influencerModel.metaData();
  let refreshFields = metaData.refreshFields;
  for (let i = 0; i < refreshFields.length; i++) {
    if (new Date(doc.currentMembership[refreshFields[i]].dailyCount.date).setHours(0, 0, 0, 0) != new Date().setHours(0, 0, 0, 0)) {
      doc.currentMembership[refreshFields[i]].dailyCount.date = Date.now();
      doc.currentMembership[refreshFields[i]].dailyCount.count = doc.currentMembership[refreshFields[i]].count;
      await doc.save();
    }
  }
});

这里刷新字段是

refreshFields: ['likes', 'messages', 'matches', 'backtrack']

任何帮助都会很棒 谢谢!

【问题讨论】:

    标签: javascript node.js mongodb mongoose fastify


    【解决方案1】:

    我不知道你为什么要在初始化钩子中多次保存文档。 AFAIK 这不是必需的。我会完全放弃await doc.save(); 行(并使函数非异步)。如果您稍后保存文档应该没问题。

    错误发生的确切原因是错误消息指出:您正在尝试并行保存文档多次。

    结帐https://mongoosejs.com/docs/middleware.html#post-async
    您没有使用异步函数架构,因为您需要在完成异步处理后调用 next()

    因此,要么不要将文档保存在挂钩中,要么在处理完异步内容后使用 next() 回调。

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2021-03-04
      • 2020-04-11
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多