作用:保证保存文档时,可以按照Schema
设置的字段进行设置,即文档限制只能在 Schema
上 。
1.1【required】:数据必填
//将name设置为必填字段,如果没有name字段,文档将不被保存,且出现错误提示
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/student')
var Schema =new mongoose.Schema({
name:{
type:String,
required:true
},
age:Number
})
var stuModel = mongoose.model('students', Schema);
new stuModel({age:20}).save((err,doc)=>{
if(err){
return console.log(err)
}
console.log(doc)
})
//报错:name: Path `name` is required.
1.2【default】:默认值
//设置age字段的默认值为18,如果不设置age字段,则会取默认值
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/student')
var Schema =new mongoose.Schema({
name:String,
age:{
type:Number,
default:18
}
})
var stuModel = mongoose.model('students', Schema);
new stuModel({name:'李雷'}).save((err,doc)=>{
if(err){
return console.log(err)
}
console.log(doc)
})
//{ age: 18, _id: 6018f3bd7e51343e6c4f212b, name: '李雷', __v: 0 }
1.3【min】【max】:最小/大值
- 只适用于数字 ```javascript //将age的取值范围设置为[0,10]。如果age取值为20,文档将不被保存,且出现错误提示 const mongoose = require(‘mongoose’) mongoose.connect(‘mongodb://localhost:27017/student’) var Schema =new mongoose.Schema({ name:String, age:{ type:Number, min:10, max:18 } }) var stuModel = mongoose.model(‘students’, Schema); new stuModel({name:’李雷’,age:20}).save((err,doc)=>{ if(err){ return console.log(err) } console.log(doc) })
//age: Path age
(20) is more than maximum allowed value (18).
<a name="qAESl"></a>
### 1.4【match】:正则匹配
- 只适用于字符串
```javascript
//将name的match设置为必须存在'01'字符。如果name不存在'01',文档将不被保存,且出现错误提示
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/student')
var Schema =new mongoose.Schema({
name:{type:String,match:/01/},
age:Number,
})
var stuModel = mongoose.model('students', Schema);
new stuModel({name:'李雷',age:20}).save((err,doc)=>{
if(err){
return console.log(err)
}
console.log(doc)
})
//name: Path `name` is invalid (李雷).
1.5【enum】:枚举匹配
- 只适用于字符串 ```javascript //将name的枚举取值设置为[‘zs’,’ls’,’ww’],如果name不在枚举范围内取值,文档将不被保存,且出现错误提示 const mongoose = require(‘mongoose’) mongoose.connect(‘mongodb://localhost:27017/student’) var Schema =new mongoose.Schema({ name:{type:String,enum:[‘zs’,’ls’,’ww’]}, age:Number, }) var stuModel = mongoose.model(‘students’, Schema); new stuModel({name:’lss’,age:20}).save((err,doc)=>{ if(err){ return console.log(err) } console.log(doc) })
//name: ValidatorError: lss
is not a valid enum value for path name
.
<a name="Ru6lc"></a>
### 1.6【validate】:自定义匹配
- `validate`实际上是一个函数,函数的参数代表当前字段,返回`true`表示通过验证,返回`false`表示未通过验证。
```javascript
//定义名字name的长度必须在4个字符以上
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/student')
var Schema =new mongoose.Schema({
name:{type:String,validate:nameLength},
age:Number,
})
var stuModel = mongoose.model('students', Schema);
new stuModel({name:'abcd',age:20}).save((err,doc)=>{
if(err){
return console.log(err)
}
console.log(doc)
})
function nameLength(arg){
if(arg.length>4){
return true
}
return false
}
//name: Validator failed for path `name` with value `abcd`