2014-09-22 73 views
4

我有这个模式,我验证了数组0123'的元素,但我不知道如何验证数组本身。如何在Mongoose数组中验证其同时其元素

var DictionarySchema = new Schema({ 
     book: [ 
      {    
       1: { 
        type: String, 
        required: true 
       }, 
       2: String, 
       3: String, 
       c: String, 
       p: String, 
       r: String 
      } 
     ] 
    }); 

例如,我想根据需要放入书籍数组。任何帮助?

回答

8

您可以使用custom validator来执行此操作。简单地检查阵列本身不为空:

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

mongoose.connect('mongodb://localhost/test'); 

var bookSchema = new Schema({ 

    1: { type: String, required: true }, 
    2: String, 
    3: String, 
    c: String, 
    p: String, 
    r: String 
}); 

var dictSchema = new Schema({ 
    books: [bookSchema] 
}); 

dictSchema.path('books').validate(function(value) { 
    return value.length; 
},"'books' cannot be an empty array"); 

var Dictionary = mongoose.model('Dictionary', dictSchema); 


var dict = new Dictionary({ "books": [] }); 


dict.save(function(err,doc) { 
    if (err) throw err; 

    console.log(doc); 

}); 

当有数组中没有含量将抛出一个错误,否则通关为数组中的字段提供规则的验证。

+0

谢谢,这非常有用!!!但是,还有另一种方法可以将验证内联传递给数组'book'。因为有时需要使用其他不同的过滤器来处理''required',例如('max','min','expires','enum','小写字母','match','trim','uppercase'等)已经由猫鼬提供了,我认为这可能是低效率的,在'validate()'函数中实现它。 – in3pi2 2014-09-22 03:30:10

+2

@ in3pi2无论如何,对于所有内置的类型和规则来说,这是如何进行验证的,并且mongoose API只是暴露内部方法,因此您可以“插入”它。另请参阅文档中的[plugins](http://mongoosejs.com/docs/plugins.html)。 – 2014-09-22 03:36:19

+1

@ in3pi2因为猫鼬默认会这样做。你可以关掉它。通读文档,如果你有其他问题,然后问另一个问题,而不是发表评论。 – 2014-09-22 04:36:33

相关问题