Sis*_*sir 2 mongoose mongodb mongoose-schema
我通过 pre hook 为 mongodb 文档保存一个较小的唯一 id。
schema.pre('save', function(next) {
this.refId = uid();
next();
});
Run Code Online (Sandbox Code Playgroud)
据我了解,save挂钩仅在创建文档时运行。
但是,当我通过查询获取文档并尝试通过添加一些新数据来保存它时,唯一的 id ( refId) 字段也会更新。
const foo = Foo.findOne({refId: 'fwe23fw23'});
Foo.field = 'new value';
Foo.save(); // runs pre hook again;
Run Code Online (Sandbox Code Playgroud)
这让我相信save钩子在每个save()查询上运行,无论它是否是createorupdate方法。
如何确保refId只创建一次并且在任何更新操作中都不会更改?
注意:我知道我可以使用updateOne()模型本身来更新文档。但我想了解为什么保存文档本身不起作用。
和document.save()都会Model.create触发预保存挂钩。
您可以使用isNew属性来检查文档是否已创建。
schema.pre("save", function(next) {
if (this.isNew) {
this.refId = uid();
}
next();
});
Run Code Online (Sandbox Code Playgroud)
现在refId只会在创建文档时创建一次,并且在使用save时它的值不会改变。
| 归档时间: |
|
| 查看次数: |
2869 次 |
| 最近记录: |