Schema的数据校验
在定义Schema
数据模式的时候,可以对字段的值进行数据校验;
确保满足条件的数据才会被添加到数据库中。
required-必填校验
- 针对与任意类型,指定的字段必须传入
var userSchema = mongoose.Schema({
name: {
type: String,
required: true
},
sn: String
})
var u = new UserModel({
sn : 'sn1234567812',
})
// User validation failed: name: Path `name` is required.
长度校验
maxlength
和minlength
:针对于String
类型,控制字符串的长度
var userSchema = mongoose.Schema({
sn: {
type: String,
maxlength: 20,
minlength: 10,
}
})
var u = new UserModel({
sn : 'sn123',
// User validation failed: sn: Path `sn` (`sn123`) is shorter than the minimum allowed length (10)
sn : 'sn123123123123123123123',
// User validation failed: sn: Path `sn` (`sn123123123123123123123`) is longer than the maximum allowed length (20).
})
大小校验
max
和min
:针对于Number
类型,控制数值的大小
var userSchema = mongoose.Schema({
height: {
type: Number,
min: 1,
max: 500
}
})
var u = new UserModel({
height : -1,
// User validation failed: height: Path `height` (-1) is less than minimum allowed value (1).
height : 500,
// User validation failed: height: Path `height` (500) is more than maximum allowed value (500).
})
enum-枚举校验
enum
指定一个数组,规定传入的值必须在数组中存在,一般用来限制状态String
类型和Number
类型都能够生效
var userSchema = mongoose.Schema({
isUse: {
type: Number,
enum: [0, 1] // 值必须在枚举的数组里面 Number和String都支持
}
})
var u = new UserModel({
status : 2,
// User validation failed: status: `2` is not a valid enum value for path `status`.
})
match-正则匹配
- 使用
match
,设置正则表达式,用来限制数据的内容
var userSchema = mongoose.Schema({
sn: {
type: String,
macth: /^sn(.*)g/i
}
})
var u = new UserModel({
sn : '1sn123',
// User validation failed: sn: Path `sn` is invalid (1sn123)
})
validate-自定义校验规则
- 如果mongoose提供的校验规则无法满足你的需求,可以自定义校验规则
var userSchema = mongoose.Schema({
name: {
type: String,
validate: function (val) {
if(this.status === 1) {
return val.indexOf("zhangsan") != -1
} else {
return val.indexOf("lisi") != -1
}
}
},
status: Number
})
var u = new UserModel({
name : 'lisi',
status: 1
})
// User1 validation failed: name: Validator failed for path `name` with value `lisi`