【问题标题】:Passing a virtual property value to the Mongoose `pre-save` hook将虚拟属性值传递给 Mongoose `pre-save` 钩子
【发布时间】:2019-07-26 05:39:08
【问题描述】:

在我的 MongoDB/Node 后端中,我使用 Mongoose 中间件(前/后挂钩)以便在文档的某些方面发生变化时生成注释。一切都按预期工作——除了一件。我需要知道对记录进行更改的最后一个人的 _id - 以便可以将其包含在生成的注释中。

现在,如果可以将此值保存到文档上的属性中,那就相当简单了。我只是将该值分配给“lastModifiedBy”之类的属性。但是,这个项目的方向不允许这样做。

那么,我想知道我是否可以使用虚拟属性来做到这一点?我很清楚如何从文档中存在的数据生成虚拟属性,如下所示:

personSchema.virtual('name.full').get(function () {
  return this.name.first + ' ' + this.name.last;
});

但是,如果值不是从文档模型中已有的数据中解析出来的,这将如何工作?

并且,澄清一下,在我更新记录的函数中,我确实可以访问这个值。但是如何通过pre-save 挂钩将该值传递给我的触发器文件?这就是我正在努力解决的问题。如果可能的话,对它如何工作的基本演示会有所帮助。或者,如果有其他方法可以实现这一点,我也会对此持开放态度。

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    这就是你如何将值传递给你的预保存钩子:使用 ES6 符号,如下所示:

    const lastModifiedBy = Symbol.for('lastModifiedBy');
    
    // later
    app.getAsync(async (req, res) => {
      const doc = await MyModel.findOne({ _id: req.params.id });
      doc[lastModifiedBy] = req.params.staffId;
      // Can now access `this[lastModifiedBy]` in save middleware: https://mongoosejs.com/docs/middleware.html
      await doc.save();
    });
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 2015-10-27
      • 2012-07-11
      • 2010-10-23
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2015-07-20
      • 2018-04-22
      相关资源
      最近更新 更多