Mongoose будет преобразовывать значения модели в определенный тип в схеме, когда это возможно.
Приведение выполняется при создании экземпляра модели.
Достоверность экземпляра модели проверяется непосредственно перед сохранением его в базе данных.
Поскольку приведение выполняется до проверки достоверности, вы получаете значение, уже приведенное в validate
function.
Если вы не хотите, чтобы Number SchemaType
был приведен, когда значение не является номером типа, существует обходной путь, определяющий пользовательский метод set
для свойства.Этот метод set
получает исходное значение модели в качестве параметра, и он будет выполнен до приведения, поэтому у вас есть возможность вернуть значение, которое не может быть приведено к числу, например непустую строку.Таким образом, mongoose выдаст ValidationError
при попытке сохранить экземпляр модели.
Примерно так:
const User = mongoose.model('User', {
age : {
type: Number, // type of data
default: 0, // if don't provided, client will has 0 for age value
set: v => typeof v !== 'number' ? 'Throw error' : v
}
});
Для логического типа схемы вы можете использовать свойства convertToTrue
и convertToFalse
, чтобы определить, какие значения должны быть преобразованы в true или false соответственно.
Пожалуйста, проверьте документация mongoose для получения дополнительной информации.