2013-12-10 3 views
0

С Mongoose мы можем гарантировать, что Листовые дорожки имеют определенный тип: new Schema({name: String}) и user.name = {} не пройдут проверку. Хорошо.Как обеспечить структуру схемы Mongoose

Но скажем, теперь я меняю схему на new Schema({name: {first:String, last:String}}). работает user.name="Tyler";user.save() проверяет только штраф. Кажется, что проверка целостности схемы применима только к путям листьев, а не к корневым/промежуточным путям (ака, а не к схеме ))

Есть ли способ вызвать ошибки проверки здесь?

+0

Кстати, это тоже не работает: 'schema.path ('name'). Validate (function (v) {return typeof v === 'object'}, err)'. Броски 'Невозможно вызвать метод 'validate' of undefined' – lefnire

ответ

2

Mongoose также поддерживает некоторые более схемы проверки, кроме типов листьев, см here для деталей:

Mongoose имеет несколько встроенных валидаторов.

  • Все SchemaTypes имеют встроенные в требуемом валидатор
  • Числа имеют мин и макс валидаторов
  • Строки имеют перечисление и матч валидаторов

именно требуемый валидатор может быть использована для решения проблема, описанная в вопросе:

new Schema({ 
    name: { 
     first: { 
      type: String, 
      required: true 
     } , 
     last: { 
      type: String, 
      required:true 
     } 
    } 
}) 

Если встроенные проверки не являются достаточными, существует также возможность создавать пользовательские валидаторы, используя, например, mongoose-validator.

+0

Хорошее мышление по идее' required'. Я подумал об этом, попробовал, он сработал - затем отступил, подумав, «что не может быть правильным подходом». Теперь вы упомянули об этом, и я думаю об этом более подробно, я думаю, что это на самом деле довольно приличный подход. – lefnire

Смежные вопросы