模式的扩展
默认值
默认值的类型:
固定值、即使生成
代码展示:
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修饰符
代码展示:
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'
});
/*apple1.save(function(err){
if(err){
return '保存出错了!';
}
});*/
Apple.find(function(err,docs){
if(err){
return '查找失败了!';
}
console.log('数据库里面的数据为:',docs);
});
console.log('apple1为:',apple1.address);
//default是schema里面特有的
虚拟属性
实现方式:
Schema.virtual()
代码展示:
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));
索引
索引:
唯一索引、辅助索引 //辅助索引 增加查询速度
代码展示:
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('图书信息保存成功!');
});
});