我有一个带有枚举字段的模型,目前文档可以包含枚举中的任何单个值。我希望允许文档具有一组值,但是让mongoose强制所有值都是枚举中存在的有效选项 - 这可能吗?
基本上我希望相当于HTML <select multiple>
元素,而不是<select>
答案 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
}
//...
})