2015-04-02 2 views
0

У меня есть следующая схема:Можно ли использовать условие `required: true` validation by?

var Schema = new mongoose.Schema({}); 

Schema.add({ 
    type: { 
     type: String 
     , enum: ['one', 'two', 'three'] 
    } 
}); 

Schema.add({ 
    title: { 
     type: String 
     //, required: true ned set by some conditional 
    } 
}); 

Как вы можете из определения preseding схемы У меня есть два поля type и title. Второй (title) должен быть required: true, только если type - (one | two) и должен быть false, если тип - three.

Как я могу сделать это с помощью мангуста?

EDIT: благодарит за ответы. У меня есть еще один связанный с этим вопрос, который я задаю здесь:

Я могу удалить поле, если это не требуется? Скажем, тип, если three, но также было предоставлено поле title. Чтобы предотвратить сохранение ненужного title в этом случае, как его удалить?

ответ

2

Вы можете назначить функцию на required валидатора в мангуста.

Schema.add({ 
    title: String, 
    required: function(value) { 
    return ['one', 'two'].indexOf(this.type) >= 0; 
    } 
}); 

documentation не государство в явной форме, что вы можете использовать функцию в качестве аргумента, но если вы нажмете show code вы увидите, почему это возможно.

+0

лучший ответ! Спасибо за помощь. – Erik

0

вы можете попробовать одно из следующих действий:

Schema.add({ 
    title: { 
     type: String 
     //, required: true ned set by some conditional 
    } 
}); 

Schema.title.required = true; 

или

var sky = 'gray' 

var titleRequired = sky === 'blue' ? true : false 

Schema.add({ 
    title: { 
     type: String, 
     required: titleRequired 
    } 
}); 
+0

Мне нужно получить этот случай при создании нового документа: 'new schemaModel ({type:" one "," title ": undefined})'; – Erik

1

Альтернативы принятого ответ с помощью опции validate:

Schema.add({ 
    title: String, 
    validate: [function(value) { 
    // `this` is the mongoose document 
    return ['one', 'two'].indexOf(this.type) >= 0; 
    }, '{PATH} is required if type is either "one" or "two"'] 
}); 

UPDATE: Я должен отметить валидаторы запускаются только если поле не определены с единственным исключением не требуется. Таким образом, это не будет хорошей альтернативой.

+0

Спасибо. Это тоже хорошо, – Erik

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

  • Нет связанных вопросов^_^