Javascript Mongoose-如果新值不在可用枚举列表中,如何设置默认值
我有以下模式:Javascript Mongoose-如果新值不在可用枚举列表中,如何设置默认值,javascript,node.js,mongoose,mongoose-schema,Javascript,Node.js,Mongoose,Mongoose Schema,我有以下模式: const userSchema = new mongoose.Schema({ profile: { name: { type: String, default: "", enum: ["", "Mike", "John", "Bob"] } } } 我想确保,当触发了user.save操作并且提供name变量不在可用枚举值列表中时,验证不会失败,而是将值设置为默认值 例如,在节点中: User .findByI
const userSchema = new mongoose.Schema({
profile: {
name: {
type: String,
default: "",
enum: ["", "Mike", "John", "Bob"]
}
}
}
我想确保,当触发了user.save
操作并且提供name
变量不在可用枚举
值列表中时,验证不会失败,而是将值设置为默认值
例如,在节点中:
User
.findById(req.user.id)
.then(user => {
user = Object.assign(user, { name: "Sam" })
return user.save()
})
这将导致验证失败,因为Sam不是路径配置文件的有效枚举值。name
,但要求将值回退到空字符串:
{
name: ""
}
我尝试使用Mongoose预验证钩子,但似乎无法访问提供的值,并且文档也没有帮助。也许您可以使用
如果只是将默认值添加到可用枚举值列表中,会怎么样?因此,
enum:[”“,“Mike”,“John”,“Bob”]
这并不能解决问题,因为save显式地尝试设置一个不在可接受值列表中的值。这里的问题是,验证(“验证”预挂接)发生在“保存”预挂接之前,因此保存将失败,甚至不会到达//验证此处
位--
var schema = new Schema(..);
schema.pre('save', function(next) {
// verify here
next();
});