Skip to main content

Validation

Required

const courseSchema = new Mongoose.Schema({
name:{type:String, required:true}, //to valide that name must not be empty
});
const createCourse = async() =>{
const course = new Course({
//name:"NodeJS Intro",
});
try{
const result = await course.save();
console.log(result);
}catch(error){
console.log(error); //Will generate an error when validation fails
}
}

minLength maxLength

const courseSchema = new Mongoose.Schema({
name:{type:String,required:true,minlength:5,maxlength:255}, //min and max of text
});

min max

const courseSchema = new Mongoose.Schema({
price:{type:Number,required:true,min:0,max:9999}, //min and max of numbers
date:{type:Date,min:'1900-01-01',max:'9999-12-31'} //min and max of dates
});

enum

const courseSchema = new Mongoose.Schema({
type:{type:String,enum:['physical','audiobook','ebook','pdf']}, //restrict entry
});

round

const courseSchema = new Mongoose.Schema({
price:{
type:Number,
set:v => Math.round(v), //when setting into database, round to the nearest whole number
get:v => Math.round(v) //when getting from database, round to the nearest whole number
}
});

lowercase uppercase

const courseSchema = new Mongoose.Schema({
name:{type:String,lowercase:true}, //convert to lowercase
author:{type:String,upppercase:true}, //convert to uppercase
});

trim

const courseSchema = new Mongoose.Schema({
description:{type:String,trim:true} //trim left and right blank spaces
});

default

const courseSchema = new Mongoose.Schema({
isPublished:{type:Boolean,default:false}, //set default value
date:{type:Date,default:Date.now}
});

match

  • match is used to set a regexp validator for your schema value
const courseSchema = new Mongoose.Schema({
email:{type:String,match:/.+@[^@]+\.[^@]{2,}$/}
});

custom

  • we can set our own validator
const courseSchema = new Mongoose.Schema({
tag:{
type:Array,
validate:{validator:function(v){return v && v.length>0;},message:'a course should have a least one tag'}
}
});