整体介绍:这里分别记录mongoose中 模式的扩展,模型方法,数据校验,中间件,DBRef(集合之间的数据引用)node
1:模式的扩展:默认值,模式修饰符,虚拟属性,索引;mongodb
默认值:一个模型初始化时,不对它进行赋值,他也会存在默认值,有默认值和及时生成的值;数据库
/** * Created by 1 on 2016/4/9. */ var mongoose=require('mongoose'); uri ="mongodb://localhost/test"; mongoose.connect(uri); var SchoolSchema=new mongoose.Schema({ sage:String, //设置默认值为nanchang sname:{ type:String, default:'nanhang' }, //设置默认值为当前时间 stime:{ type:Date, default:Date.now } }); var School=mongoose.model('School',SchoolSchema); var school=new School(); school.sage='nanchang' console.log(school); //输出: "C:\Program Files\JetBrains\WebStorm 10.0.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" moshi.js { sname: 'nanhang', stime: Sat Apr 09 2016 16:48:30 GMT+0800 (中国标准时间), _id: 5708c1de9d5a5a3c1a7c4745, sage: 'nanchang' }
模式修饰符:它包括预约义的模式修饰符,自定义的setter修饰符,自定义getter修饰符。(setter存,getter取数据)json
var SchoolSchema=new mongoose.Schema({ sage:String, sname:{ type:String, //预约义修饰符:它会去掉先后的空字符串 trim:true, default:'nanhang' }, stime:{ type:Date, default:Date.now } }); var school=new School(); school.sage=' beijing ' school.sname=' beijingdaxue '; console.log(school); //打印出结果 "C:\Program Files\JetBrains\WebStorm 10.0.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" moshi2.js { sname: 'beijingdaxue', stime: Sat Apr 09 2016 16:57:44 GMT+0800 (中国标准时间), _id: 5708c408f6e4aa9c19e692eb, sage: ' beijing ' } //自定义set修饰符:添加到数据库以前操做: var SchoolSchema=new mongoose.Schema({ sage:String, sname:{ type:String, //设置输出前,判断用户是否加了http://若是加了,直接返回,若是没加那么帮他加上,让后添加到数据库中 set:function(sname){ if(!sname) return sname; if(0!==sname.indexOf('http://')) sname='http://'+sname; return sname; } }, stime:{ type:Date, default:Date.now } }); //打印出对象 var School=mongoose.model('School',SchoolSchema); var school=new School(); school.sage=' beijing ' school.sname='baidu.com'; console.log(school); //输出结果 "C:\Program Files\JetBrains\WebStorm 10.0.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" moshi2.js { stime: Sat Apr 09 2016 17:06:00 GMT+0800 (中国标准时间), _id: 5708c5f8d33867b419be7314, sage: ' beijing ', sname: 'http://baidu.com' }
虚拟属性,有些数据咱们是经过数据库里面的属性组合而来,如firstname+lastname 组合成fullnamemongoose
var MynameSchema=new mongoose.Schema({ firstname:String, lastname:String }); //定义虚拟属性,fullname MynameSchema.virtual('fullname').get(function(){ return this.firstname+" "+this.lastname; }) var name=new MyName({ firstname:'kobe', lastname:'brynt' }); console.log('user full name:'+name.fullname); //虚拟属性的输出 "C:\Program Files\JetBrains\WebStorm 10.0.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" xuni.js user full name:kobe brynt //若是咱们须要把对象以json形式打印出来:,加上: MynameSchema.set('toJSON',{getters:true,virtual:true}); //打印语句; console.log('user full name:'+name.fullname); console.log(name); console //输出: user full name:kobe brynt { _id: 5708e751b979c7c41dd7c0c8, lastname: 'brynt', firstname: 'kobe' } {"firstname":"kobe","lastname":"brynt","_id":"5708e751b979c7c41dd7c0c8","fullname":"kobe brynt","id":"5708e751b979c7c41dd7c0c8"}
索引:惟一索引(unique:true),辅助索引(index:true)ui