需要Mongoose make Array

时间:2016-04-26 09:09:15

标签: validation mongoose

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

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

我希望项目至少需要一个标记才能使用它。但是当我保存一个没有标签数组的新项目时,mongoose不会抛出错误:

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

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

3 个答案:

答案 0 :(得分:15)

单行将是:

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

SchemaTypes

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

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

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

代替

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

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