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();
});