是否可以在type: [String]
上使用enum
验证?
例:
var permitted = ['1','2','3'];
var exampleSchema = new Schema({
factors: {
type: [String],
enum: permitted,
required: "Please specify at least one factor."
}
});
我本以为factors
只能包含 permitted
中的值。
对我来说很好用(mongoose@4.1.8
)
var schema = new mongoose.Schema({
factors: [{type: String, enum: ['1', '2', '3'], required: ...}]
...
})
注意 我正在使用对象数组
从mongoose
版本5.0.6
及更高版本开始,OP 问题现在可以工作了!
factors: {
type: [String],
enum: permitted,
required: "Please specify at least one factor."
}
参考
https://github.com/Automattic/mongoose/issues/6204#issuecomment-374690551
4.0 版之前的 Mongoose 不支持对 Schema 静态方法(如 .update
、.findByIdAndUpdate
、.findOneAndUpdate
)进行验证。
但它支持实例方法document.save()
.
因此,请使用document.save()
进行内置启动验证或者这{ runValidators: true }
使用.update
、.findByIdAndUpdate
、.findOneAndUpdate
等方法。
参考:猫鼬 .update() 不触发验证检查
试试这个
let inventory_type_enum = ["goods", "services"];
inventory_type: {
type: String,
enum: inventory_type_enum,
validate: {
// validator: (inventory_type) => !inventory_type.enum.includes(inventory_type),
validator: (inventory_type) => inventory_type_enum.includes(inventory_type),
message: languages('general_merchandise_model','inventory_type')
},
required : [true, languages('general_merchandise_model','inventory_type_required')],
},
如果你有枚举或你有对象枚举
brand: {
type: String,
required: true,
enum: Object.values(TypeBrandEnum)
},
你可以使用这样的东西
{
factors: [
{
type: [String],
enum: ['1', '2', '3'],
},
],
}