模式的擴展
默認值
默認值的類型:
固定值、即便生成mongodb
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
appleName : {
type : String,
default : '江蘇紅果'
},
madeTime : {
type : Date,
default : Date.now //new Date()
}
});
var Apple = mongoose.model('Apple',AppleSchema);
var apple1 = new Apple();
console.log('User:',apple1);數據庫
模式修飾符
類型:
預約義的模式修飾符、自定義的setter修飾符、自定義的getter修飾符app
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
appleName : {
type : String,
default : ' 江蘇紅果 ',
trim : true
},
madeTime : {
type : Date,
default : Date.now //new Date()
},
address : {
type : String,
/*set : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
},*/
get : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
}
}
});
var Apple = mongoose.model('Apple',AppleSchema);
/*var Apple = mongoose.model('Apple',{
appleName : {
type : String,
trim : true
},
address : {
type : String,
set : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
}
}
});*/
var apple1 = new Apple({
appleName : ' 江蘇紅果 ',
address : 'baidu.com'
});mongoose
/*apple1.save(function(err){
if(err){
return '保存出錯了!';
}
});*/post
Apple.find(function(err,docs){
if(err){
return '查找失敗了!';
}
console.log('數據庫裏面的數據爲:',docs);
});ui
console.log('apple1爲:',apple1.address);this
//default是schema裏面特有的url
虛擬屬性
實現方式:
Schema.virtual()spa
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
firstName : String,
lastName : String
});
AppleSchema.virtual('fullName').get(function(){
return this.firstName + '' + this.lastName;
});
AppleSchema.set('toJSON',{getters : true,virtual : true});
var Apple = mongoose.model('Apple',AppleSchema);
var apple1 = new Apple({
firstName : 'app',
lastName : 'le'
});
console.log('apple fullName:',apple1.fullName);
console.log('JSON:',JSON.stringify(apple1));code
索引
索引:
惟一索引、輔助索引 //輔助索引 增長查詢速度
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
code : {
type : Number,
unique : true //惟一索引
},
name : {
type : String,
index : true //輔助索引
}
});
模型的方法
方法的分類
自定義靜態方法、自定義實例方法
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
code : {
type : Number,
},
name : {
type : String,
}
/*code : Number,
name : String*/
});
/*
靜態方法
*/
AppleSchema.statics.findByCode = function(code,cb){
this.findOne({code:code},function(err,doc){
cb(err,doc);
});
};
/*
實例方法
*/
AppleSchema.methods.print = function(){
console.log('appleName:',this.name);
};
var Apple = mongoose.model('Apple',AppleSchema);
var apple = new Apple({
code : 1,
name : '江蘇紅果'
});
/*apple.save(function(err){
if(err){
return err;
}
Apple.findByCode(1,function(err,doc){
console.log("靜態方法打印的結果爲:",doc);
})
});*/
/*Apple.find(function(err,doc){
console.log("doc爲:",doc);
});*/
apple.print();
數據的校驗
預約義的驗證器:
required、Number(max,min)、String(enum,match)
自定義的驗證器:
validate
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var OrderSchema = new mongoose.Schema({
count : {
type : Number,
//必須有值
required : true,
//最大值
max : 1000,
//最小值
min : 10
},
intro : {
type : String,
//枚舉類型
enum : ['優','良','通常','差','特別差']
},
phone : {
type : String,
//正則驗證
match : /135/g,
//自定義驗證器
validate : function(phone){
return phone.length>10;
}
},
});
mongoose.model('Order',OrderSchema);
var Order = mongoose.model('Order');
var order = new Order({
count : 1000,
intro : '優',
phone : '12567891350'
});
//order.count = 1;
order.save(function(err){
if(err){
return console.log('保存出錯了!',err);
}
console.log('保存成功');
});
中間件
類型:
文檔中間件(init、validate、save、remove),查詢中間件(count、find、findOne、findOneAndRemove、findOneAndUpdate、update)
預處理中間件
後置處理中間件
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var ResultSchema = new mongoose.Schema({
address : String
});
//預處理中間件
ResultSchema.pre('save',true,function(next,done){
console.log('執行預處理中間件!');
next();
done();
});
//後置處理中間件
ResultSchema.post('save',function(next){
console.log('執行後置處理中間件!',next);
next();
})
mongoose.model('Result',ResultSchema);
var Result = mongoose.model('Result');
var result = new Result();
result.address = 'I am in GuangZhou';
result.save();
DBRef
DBRef的定義://至關於數據庫裏面表與表之間的聯合查詢,關聯關係
populate()
代碼展現:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test5');
var UserSchema = new mongoose.Schema({
name : String
});
var BookSchema = new mongoose.Schema({
title : String,
author : {
type : mongoose.Schema.ObjectId,
ref : 'User'
}
});
mongoose.model('User',UserSchema);
mongoose.model('Book',BookSchema);
var User = mongoose.model('User');
var Book = mongoose.model('Book');
var user = new User({
name : '張三'
});
var book = new Book({
title : '鬼故事',
author : user
});
user.save(function(err){ if(err) return console.log('做者保存失敗!err=',err); /*book.save(function(err){ if(err) return console.log('圖書保存失敗!err=',err); }); Book.find().populate('author').exec(function(err,docs){ console.log('信息爲:',err,docs); });*/ BookSchema.post('save',function(next){ Book.find().populate('author').exec(function(err,docs){ if(err) return console.log(err); console.log('保存成功後,查詢的結果爲:',docs); }); }); book.save(function(err){ if(err) return console.log(err); console.log('圖書信息保存成功!'); });});