是否可以在猫鼬中创建多选枚举

时间:2014-12-12 16:26:19

标签: node.js mongodb mongoose

我有一个带有枚举字段的模型,目前文档可以包含枚举中的任何单个值。我希望允许文档具有一组值,但是让mongoose强制所有值都是枚举中存在的有效选项 - 这可能吗?

基本上我希望相当于HTML <select multiple>元素,而不是<select>

2 个答案:

答案 0 :(得分:9)

是的,您可以将enum应用于定义为字符串数组的路径。每个值都将传递给枚举验证器,并将进行检查以确保它们包含在枚举列表中。

var UserSchema = new Schema({
    //...
    pets: {type: [String], enum: ["Cat", "Dog", "Bird", "Snake"]}
    //...
});

//... more code to register the model with mongoose

假设您的HTML表单中有一个名为pets的多项选择,您可以在路线中填写表单中的文档,如下所示:

var User = mongoose.model('User');
var user = new User();

//make sure a value was passed from the form
if (req.body.pets) {
    //If only one value is passed it won't be an array, so you need to create one
    user.pets = Array.isArray(req.body.pets) ? req.body.pets : [req.body.pets]; 
}

答案 1 :(得分:2)

作为参考,在Mongoose 4.11版上,对先前接受的答案的枚举限制不起作用,但以下确实有用

const UserSchema = new Schema({
  //...
  role: [ { type: String, enum: ["admin", "basic", "super"] } ]
  //...
})

或者,如果您想要/需要包含type以外的其他内容:

const UserSchema = new Schema({
  //...
  role: {
    type: [ { type: String, enum: ["admin", "basic", "super"] } ],
    required: true
  }
  //...
})