You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose中如何为用户Schema的role字段设置预定义可选值?

如何限制Mongoose Schema中role字段只能选择预定义值?

你可以通过以下两种方式实现role字段只能在admin和manager中选择:

方法一:使用Mongoose内置的enum属性(推荐)

这是最简洁直接的方式,利用Mongoose原生支持的枚举验证:

const userSchema = new mongoose.Schema({
  username: {
      type: String,
      validate: function (v) {
          return /([0-9a-zA-Z])\w{6,}/.test(v);
      },
      required: [true, "Username required"],
  },
  passwordHash: {
      type: String,
      required: [true, "PasswordHash required"],
  },
  role: {
      type: String,
      required: [true, "User role required"],
      enum: {
          values: ['admin', 'manager'],
          message: '角色只能是admin或manager'
      }
  },
});

说明:

  • values数组指定了允许的所有角色值
  • message是验证失败时返回的自定义提示信息,方便捕获错误

方法二:自定义验证器

如果需要更灵活的验证逻辑(比如后续动态调整可选角色列表),可以用自定义验证函数:

const userSchema = new mongoose.Schema({
  username: {
      type: String,
      validate: function (v) {
          return /([0-9a-zA-Z])\w{6,}/.test(v);
      },
      required: [true, "Username required"],
  },
  passwordHash: {
      type: String,
      required: [true, "PasswordHash required"],
  },
  role: {
      type: String,
      required: [true, "User role required"],
      validate: {
          validator: function(v) {
              // 检查传入值是否在允许的列表中
              return ['admin', 'manager'].includes(v);
          },
          message: props => `${props.value} 不是有效的角色,只能选择admin或manager`
      }
  },
});

说明:

  • validator函数返回true表示验证通过,返回false则触发验证失败
  • props.value可以获取到当前传入的无效值,用于生成更精准的错误提示

内容的提问来源于stack exchange,提问作者user.mokho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:54:17