Validation 猫鼬需要制作阵列

Validation 猫鼬需要制作阵列,validation,mongoose,Validation,Mongoose,我有一个猫鼬模型,看起来像这样: var ProjectSchema = new Schema({ name: { type: String, required: true }, tags: [{ type: String, required: true }] }); 我希望它是一个项目必须有至少一个标签。但是,当我保存一个没有标记数组的新项目时,mongoose不会抛出错误: var project = new Project({'name': 'Some name'});

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

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...
});

我错过了什么?如何指定需要的数组?

好的,您需要将
类型设置为
数组
,并添加自定义验证器以确保每个条目都是
字符串

tags : {
  type     : Array,
  required : true,
  validate : {
    validator : function(array) {
      return array.every((v) => typeof v === 'string');
    }
  }
}
猫鼬4.x 一个班轮是:

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

猫鼬5.x


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

size: [{
        type: Number,
        required: true
}],
而不是

size: {
        type: [Number],
        required: true
},
我没有将类型定义为数字/字符串数组,而是将大小定义为数字数组,然后所需的属性工作,因为它不接受空数组,并引发一个错误来说明这一点。
同样,我也不确定这是否是定义所需数组的最佳方法,但就功能而言,它工作得很好。谢谢:-)@benjiman我可以传递一个必需的函数:doSome()并返回真值或假值吗?如果是,它对我不起作用。如果否,如何添加自定义验证函数以确定是否需要该值?@darshanan您应该能够传递函数,但请确保传递的是函数(
doSome
),而不是函数的结果(
doSome()
)@罗伯特克莱普,你能看一下我的模型,并给我指引正确的方向吗?很好,刚刚试过。我不知道它是这样工作的。谢谢。@benjiman请注意,只要Mongoose可以将这些条目转换为
String
,它就可以愉快地接受
tags
中的非字符串条目(在我的答案中确实会被代码捕获)。这对我不起作用,我尝试限定:{type:[String],required:true}当输入时,我不会发送密钥,也不会抛出任何密钥error@ManojRana您将在此处得到解决方案此答案对于mongoose 5不再正确,因为行为发生了变化。看见
size: {
        type: [Number],
        required: true
},