2016-03-07 56 views
0

我建立它在阵列中的复杂对象的模式:如何验证猫鼬架构具有复杂对象的数组

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

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

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

+0

你最好在服务器上用['$做这个切片'](https://docs.mongodb.org/v3.0/reference/operator/update/slice/)修饰符'$ push'。这比要求当前文档存储在内存中以验证它的长度要好得多。 –

回答

2

您可以通过架构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] } } }