【问题标题】:Mongoose enum Validation on String Arrays?字符串数组上的猫鼬枚举验证?
【发布时间】:2015-08-27 06:57:01
【问题描述】:

是否可以在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 中的值。

【问题讨论】:

    标签: arrays string validation enums mongoose


    【解决方案1】:

    4.0 版之前的 Mongoose 不支持对 Schema 静态方法(如 .update.findByIdAndUpdate.findOneAndUpdate)进行验证。

    但它支持实例方法document.save()

    所以,要么使用document.save() 进行内置初始化验证 或者这个{ runValidators: true }.update.findByIdAndUpdate.findOneAndUpdate 等方法。

    参考: Mongoose .update() does not trigger validation checking

    【讨论】:

      【解决方案2】:

      你可以使用这样的东西

      {
       factors: [
          {
            type: [String],
            enum: ['1', '2', '3'],
          },
        ],
      }
      

      【讨论】:

        【解决方案3】:

        如果你有 enuns 或者你有 object enuns

        brand: {
            type: String,
            required: true,
            enum: Object.values(TypeBrandEnum)
          },
        

        【讨论】:

        • 请用一些解释来扩充您的纯代码答案。 (不需要花一些时间检查拼写,但会改善总体印象。)
        【解决方案4】:

        试试这个

        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')],
        },
        

        【讨论】:

          【解决方案5】:

          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

          【讨论】:

            【解决方案6】:

            这对我来说很好用 (mongoose@4.1.8)

            var schema = new mongoose.Schema({
              factors: [{type: String, enum: ['1', '2', '3'], required: ...}] 
              ...
            })
            

            注意我使用的是对象数组

            【讨论】:

            • 我不知道这个功能!酷:)
            • 我可以做这样的事情来创建字符串枚举数组而不是创建对象数组吗?角色:{ type: [{ type: String, enum: [ 'resident', 'distributor', 'company', 'moderator', 'admin' ] }],默认值:'resident' }
            • @Janusz01 是的,这也很好!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-26
            • 2021-01-21
            • 1970-01-01
            相关资源
            最近更新 更多