整體介紹:這裏分別記錄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