【问题标题】:Mongoose make Array requiredMongoose 需要数组
【发布时间】:2016-08-20 00:15:52
【问题描述】:

我有一个看起来像这样的猫鼬模型:

var ProjectSchema = new Schema({
    name: { type: String, required: true },
    tags: [{ type: String, required: true }]
});

我希望项目至少需要一个标签。但是,当我保存一个没有标签数组的新项目时,猫鼬不会抛出错误:

var project = new Project({'name': 'Some name'});
project.save(function(err, result) {
    // No error here...
});

我在这里缺少什么?如何指定需要的数组?

【问题讨论】:

    标签: validation mongoose


    【解决方案1】:

    猫鼬 5.x

    https://mongoosejs.com/docs/migrating_to_5.html#array-required

    tags: {
        type: [String],
        validate: v => Array.isArray(v) && v.length > 0,
    }
    

    猫鼬 4.x

    单线是:

    tags: {type: [String], required: true}
    

    SchemaTypes

    【讨论】:

    • 不错,刚试过。不知道它是这样工作的。谢谢。
    • @benjiman 请注意,这很乐意接受 tags 中的非字符串条目(我的答案中的代码确实会捕获这些条目),只要这些条目可以通过猫鼬。
    • 这对我不起作用我尝试限定:{ type: [String], required: true } 并且在输入时我没有发送关键限定蚂蚁它不会抛出任何错误
    • @ManojRana jasonjl.me/blog/2014/10/23/… 你会在这里得到解决方案
    • 此答案对于猫鼬 5 不再正确,因为行为已更改。见github.com/Automattic/mongoose/issues/5139
    【解决方案2】:

    AFAIK,您需要将 type 设置为 Array 并添加自定义验证器以确保每个条目都是 String

    tags : {
      type     : Array,
      required : true,
      validate : {
        validator : function(array) {
          return array.every((v) => typeof v === 'string');
        }
      }
    }
    

    【讨论】:

    • 完美运行。谢谢:-)
    • @benjiman 我可以传递一个所需的函数:doSome() 并返回一个 true 或 false 值吗?如果是,它不适合我。如果否,如何添加自定义验证函数以确定是否需要该值?
    • @darshanan 您应该能够传递一个函数,但请确保您传递的是 function (doSome) 而不是 result 函数(doSome())。
    【解决方案3】:

    好的,我尝试了一种新方法,它似乎对 mongoose 工作得很好 ^5.11.15 我不确定这是否是干净代码方面的正确答案,但就制作数组的功能而言需要的数字/字符串(意味着它不会接受空数组)它工作正常,如下所示

    size: [{
            type: Number,
            required: true
    }],
    

    而不是

    size: {
            type: [Number],
            required: true
    },
    

    我没有将类型定义为数字/字符串数组,而是将大小定义为数字数组,然后 required 属性在它不接受空数组并引发错误以说明这一点时起作用. 同样,我不确定这是否是定义所需数组的最佳方式,但就其功能而言,它工作得很好

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 2018-02-02
      • 2017-07-06
      • 2014-05-09
      • 2017-02-21
      • 2014-04-30
      • 2021-08-20
      • 2020-04-06
      • 1970-01-01
      相关资源
      最近更新 更多