如何使用数组中的复杂对象验证Mongoose模式

时间:2016-03-07 02:45:50

标签: node.js mongodb mongoose

我正在构建一个在数组中有一个复杂对象的模式:

foo:{
   bar:[{
       ItemA:String,
       ItemB:String
   }]
}

我想为数组中的对象添加验证,以便检查数组大小(我想将数组的大小限制为10)。

如何构建模式以验证数组中的那种对象?

1 个答案:

答案 0 :(得分:2)

您可以通过Schema中的validate选项执行此操作,如下所示

var FooSchema = new Schema({
    foo:{
       bar: {
            type: [{
               ItemA:String,
               ItemB:String
            }],
            validate: [arrlimit, '{PATH} exceeds the limit 10']
        }
    }
});

function arrlimit(arr) {
    return arr && arr.length <= 10;
};

如果您将10个项目添加到bar数组中,则

var f = Foo({});
for (var i = 0; i < 12; ++i)
    f.foo.bar.push({ItemA: 'A', ItemB: 'B'});

f.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save foo successfully....');
})

错误将出现

{ [ValidationError: Foo validation failed]
  message: 'Foo validation failed',
  name: 'ValidationError',
  errors:
   { 'foo.bar':
      { [ValidatorError: foo.bar exceeds the limit 10]
        properties: [Object],
        message: 'foo.bar exceeds the limit 10',
        name: 'ValidatorError',
        kind: 'user defined',
        path: 'foo.bar',
        value: [Object] } } }