总体介绍:这里分别记录mongoose中 模式的扩展,模型方法,数据校验,中间件,DBRef(集合之间的数据引用)
1:模式的扩展:默认值,模式修饰符,虚拟属性,索引;
默认值:一个模型初始化时,不对它进行赋值,他也会存在默认值,有默认值和及时生成的值;
/**
* 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取数据)
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 组合成fullname
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)