首页 > 解决方案 > Mongoose - 枚举字符串数组

问题描述

我有一个模式,它的属性具有预定义的字符串数组类型。

这是我试图做的:

interests: {
    type: [String],
    enum: ['football', 'basketball', 'read'],
    required: true
}

问题是,当我尝试输入未在枚举上定义的错误值时,它不会使用枚举列表对其进行验证。

例如,这将通过它不应该通过:

{ "interests": ["football", "asdf"] }

因为"asdf"未在枚举列表中预定义它不应该通过验证,但不幸的是,它通过了验证并保存它。

我试图用字符串类型的值而不是字符串数组来检查这个东西,它可以工作。

例如:

interests: {
    type: String,
    enum: ['football', 'basketball', 'read'],
    required: true
}

例如,这按预期失败:

{ "interest": "asdf" }

总之,我需要一个带有字符串数组类型的模式属性,该属性将根据预定义的值检查它的元素

实现这一目标的最有效方法是使用 validate 方法还是有更好的方法?

标签: node.jsarraysmongodbmongooseenums

解决方案


您可以尝试自定义验证吗?像这样

const userSchema = new Schema({
  phone: {
    type: String,
    validate: {
      validator: function(v) {
        return /\d{3}-\d{3}-\d{4}/.test(v);
      },
      message: props => `${props.value} is not a valid phone number!`
    },
    required: [true, 'User phone number required']
  }
});

这是文档: https ://mongoosejs.com/docs/validation.html


推荐阅读