猫鼬枚举字符串数组上的验证



是否可以在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'],
    },
  ],
}

相关内容

  • 没有找到相关文章

最新更新