通过 Model.save() 更新时触发 Mongoose 预保存挂钩
Mongoose pre save hook is triggering while updating via Model.save()
我正在通过预挂钩为 mongodb 文档保存一个较小的唯一 ID。
schema.pre('save', function(next) {
this.refId = uid();
next();
});
据我了解save
挂钩仅在创建文档时运行。
但是当我通过查询获取文档并尝试通过添加一些新数据来保存它时,唯一 ID (refId
) 字段也会更新。
const foo = Foo.findOne({refId: 'fwe23fw23'});
Foo.field = 'new value';
Foo.save(); // runs pre hook again;
这让我相信 save
钩子在每个 save()
查询上运行,无论它是否是 create
或 update
方法。
如何确保 refId
仅创建一次并且在任何更新操作中都不会更改?
注意:我知道我可以在模型本身上使用 updateOne()
来更新文档。但是我想明白为什么保存文档本身不起作用。
document.save()
和 Model.create
都会触发预保存挂钩。
您可以使用 isNew 属性 检查文档是否已创建。
schema.pre("save", function(next) {
if (this.isNew) {
this.refId = uid();
}
next();
});
现在refId只会在文档创建时创建一次,保存时其值不会改变。
我正在通过预挂钩为 mongodb 文档保存一个较小的唯一 ID。
schema.pre('save', function(next) {
this.refId = uid();
next();
});
据我了解save
挂钩仅在创建文档时运行。
但是当我通过查询获取文档并尝试通过添加一些新数据来保存它时,唯一 ID (refId
) 字段也会更新。
const foo = Foo.findOne({refId: 'fwe23fw23'});
Foo.field = 'new value';
Foo.save(); // runs pre hook again;
这让我相信 save
钩子在每个 save()
查询上运行,无论它是否是 create
或 update
方法。
如何确保 refId
仅创建一次并且在任何更新操作中都不会更改?
注意:我知道我可以在模型本身上使用 updateOne()
来更新文档。但是我想明白为什么保存文档本身不起作用。
document.save()
和 Model.create
都会触发预保存挂钩。
您可以使用 isNew 属性 检查文档是否已创建。
schema.pre("save", function(next) {
if (this.isNew) {
this.refId = uid();
}
next();
});
现在refId只会在文档创建时创建一次,保存时其值不会改变。