mongoose - 将虚拟属性值传递给 Mongoose `pre-save` 钩子
问题描述
在我的 MongoDB/Node 后端中,我使用 Mongoose 中间件(前/后挂钩)以便在文档的某些方面发生更改时生成注释。一切都按预期工作——除了一件。我需要知道对记录进行更改的最后一个人的 _id - 以便可以将其包含在生成的注释中。
现在,如果可以将此值保存到文档上的属性中,那就相当简单了。我只会将该值分配给“lastModifiedBy”之类的属性。但是,该项目的方向不允许这样做。
所以,我想知道我是否可以用虚拟财产做到这一点?我很清楚如何从文档中存在的数据生成虚拟属性,如下所示:
personSchema.virtual('name.full').get(function () {
return this.name.first + ' ' + this.name.last;
});
但是当值不是从文档模型上已有的数据中解析出来时,这将如何工作?
而且,为了澄清,在我更新记录的函数中,我确实可以访问这个值。但是如何通过pre-save
钩子将该值传递给我的触发器文件?这就是我正在努力解决的问题。如果可能,对它如何工作的基本演示会有所帮助。或者,如果有不同的方法来实现这一点,我也会对此持开放态度。
解决方案
这是将值传递给预保存挂钩的方法:使用 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();
});
推荐阅读
- r - 如何在传单地图中制作反应色标
- arm - 在 GAS 组装的 QEMU 中运行的 ARM64 ELF 可执行文件的对齐要求
- javascript - 使用map方法创建three.js组件
- python - Django 管理面板无法正确显示
- angular - Rxjs 首先轮询对象详细信息,然后根据需要根据对象的状态重复轮询
- asp.net - Asp.Net MVC自定义路由中断默认路由
- python - 使用 TweePy 通过 DM 分享推文
- c - 如何在 C 中将一棵树变成一串括号表示?
- python - 如何在 for 循环中每次更改变量名?
- excel - 如何声明一个 GroupBox?