作用:保证保存文档时,可以按照Schema设置的字段进行设置,即文档限制只能在 Schema上 。

1.1【required】:数据必填

  1. //将name设置为必填字段,如果没有name字段,文档将不被保存,且出现错误提示
  2. const mongoose = require('mongoose')
  3. mongoose.connect('mongodb://localhost:27017/student')
  4. var Schema =new mongoose.Schema({
  5. name:{
  6. type:String,
  7. required:true
  8. },
  9. age:Number
  10. })
  11. var stuModel = mongoose.model('students', Schema);
  12. new stuModel({age:20}).save((err,doc)=>{
  13. if(err){
  14. return console.log(err)
  15. }
  16. console.log(doc)
  17. })
  18. //报错:name: Path `name` is required.

1.2【default】:默认值

  1. //设置age字段的默认值为18,如果不设置age字段,则会取默认值
  2. const mongoose = require('mongoose')
  3. mongoose.connect('mongodb://localhost:27017/student')
  4. var Schema =new mongoose.Schema({
  5. name:String,
  6. age:{
  7. type:Number,
  8. default:18
  9. }
  10. })
  11. var stuModel = mongoose.model('students', Schema);
  12. new stuModel({name:'李雷'}).save((err,doc)=>{
  13. if(err){
  14. return console.log(err)
  15. }
  16. console.log(doc)
  17. })
  18. //{ 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).

  1. <a name="qAESl"></a>
  2. ### 1.4【match】:正则匹配
  3. - 只适用于字符串
  4. ```javascript
  5. //将name的match设置为必须存在'01'字符。如果name不存在'01',文档将不被保存,且出现错误提示
  6. const mongoose = require('mongoose')
  7. mongoose.connect('mongodb://localhost:27017/student')
  8. var Schema =new mongoose.Schema({
  9. name:{type:String,match:/01/},
  10. age:Number,
  11. })
  12. var stuModel = mongoose.model('students', Schema);
  13. new stuModel({name:'李雷',age:20}).save((err,doc)=>{
  14. if(err){
  15. return console.log(err)
  16. }
  17. console.log(doc)
  18. })
  19. //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.

  1. <a name="Ru6lc"></a>
  2. ### 1.6【validate】:自定义匹配
  3. - `validate`实际上是一个函数,函数的参数代表当前字段,返回`true`表示通过验证,返回`false`表示未通过验证。
  4. ```javascript
  5. //定义名字name的长度必须在4个字符以上
  6. const mongoose = require('mongoose')
  7. mongoose.connect('mongodb://localhost:27017/student')
  8. var Schema =new mongoose.Schema({
  9. name:{type:String,validate:nameLength},
  10. age:Number,
  11. })
  12. var stuModel = mongoose.model('students', Schema);
  13. new stuModel({name:'abcd',age:20}).save((err,doc)=>{
  14. if(err){
  15. return console.log(err)
  16. }
  17. console.log(doc)
  18. })
  19. function nameLength(arg){
  20. if(arg.length>4){
  21. return true
  22. }
  23. return false
  24. }
  25. //name: Validator failed for path `name` with value `abcd`