我有例如。
<form action="score" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
我假设在所有schema.pre('save', (next) => {
console.log('save fired');
next();
});
和schema.update()
事件上都将触发“保存”,因为从技术上来讲都是“保存”的事情。
例如,在架构中修改值为schema.create()
的操作,需要检查新值是否不会引发unique: true
(11000)错误并引发自己的错误。 / p>
是否有比以下更干净的方法
DuplicateKey
是否也没有用于处理“任何更新”的预钩子,而不必指定findOne,findMany等?
答案 0 :(得分:0)
是否也没有用于处理“任何更新”的预钩子,而不必指定findOne,findMany等?
不。您需要手动提供每个。
例如,修改唯一值的操作:在架构中为true,需要检查新值是否不会引发DuplicateKey(11000)错误并引发自己的错误。
https://stackoverflow.com/a/38946126/10706046-您需要为每个操作创建一个钩子。
我认为在所有schema.update()和schema.create()事件上都会触发“保存”,因为从技术上来讲都是“保存”的事情。
不。这是MongoDB中的两个单独的操作。您需要为create
和findOneAndUpdate
创建一个钩子。
另一方面,我的问题是我正在实施验证,以在createUpdateCommon(incomingData)
中创建和更新。
我正在检查传入的数据(在创建或更新时)是否不是例如引用不存在的countryId。
因此在createUpdateCommon
中,我有类似city.findOne(incomingData.city)
之类的东西。
请勿为此使用钩子。请改用架构验证器
像这样:
const userSchema = new Schema({
name: String,
city: {
type: String, //probably use ObjectID instead
validator: (value) => !!cityModel.findOne(value.city) //returns true if finds a city
}
}