mongoose進階,mongoose高級方法;默認值,模式修飾符,虛擬屬性,索引;

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

相關文章
相關標籤/搜索