链接数据库
var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/p10',{useNewUrlParser:true},function(err){
if(err){
console.log('Connect error:' + err)
}else{
console.log('Connect success' )
}
});
connect函数这是新的格式
设置模板,注册模型,初始化
var UserSchema = new mongoose.Schema({
nikename:{
type:String,
default:'new user'
}
});
var User = mongoose.model('User',UserSchema);
var user = new User();
console.log(user)
set修饰符
在存入数据库之前对数据进行一些处理
var mongoose = require("mongoose");
// mongoose.connect('mongodb://localhost/p10')
mongoose.connect('mongodb://localhost/p10',{useNewUrlParser:true},function(err){
if(err){
console.log('Connect error:' + err)
}else{
console.log('Connect success' )
}
})
var User = mongoose.model('User',{
nikename:{
type:String,
trim:true
},
blog:{
type:String,
set:function(url){
if(!url) return url;
if(0 !== url.indexOf('http://') && 0 != url.indexOf('https://'))
url = "https://" + url;
return url;
}
}
});
var user2 = new User({
nikename:" zhangyu ",
blog:"specyue.com"
});
// console.log(us?er)
console.log(user2)
get修饰符
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/p10",{useNewUrlParser:true},function(err){
if (err){
console.log("connet faild");
}
else{
console.log("connect succ");
}
});
var User = mongoose.model("User",{
blog:{
type:String,
get:function(url){
if (!url){
return url;
}
if (0!==url.indexOf('http://')&&0!==url.indexOf('https://')){
return 'https://'+url;
}
}
}
})
var user = new User({
blog:"zhangyue.com"
})
user.save(function(err){
if(err){
return console.log("sava err :",err);
}
else{
console.log(user);
console.log(user.blog);
}
})
拿到数据之后处理
虚拟属性
相当于在模板内添加一个属性
var mongoose = require("mongoose");
var PersonSchema = new mongoose.Schema({
firstName:String,
lastName:String
});
PersonSchema.virtual("fullName").get(function(){
return this.firstName+" "+this.lastName;
});
var Person = mongoose.model("Person",PersonSchema);
var person = new Person({
firstName:"zhang",
lastName:"yue"
});
console.log(person.fullName);
现在模板内有firstname和lastname属性,现在想加上fullname属性,可以用virtual解决.但是json化的时候,虚拟属性是不能直接json化的,要做一下修改.
var mongoose = require("mongoose");
var PersonSchema = new mongoose.Schema({
firstName:String,
lastName:String
});
PersonSchema.virtual("fullName").get(function(){
return this.firstName+" "+this.lastName;
});
PersonSchema.set("toJSON",{getters:true,virtual:true});
var Person = mongoose.model("Person",PersonSchema);
var person = new Person({
firstName:"zhang",
lastName:"yue"
});
console.log(person.fullName);
console.log(JSON.stringify(person));
索引
unique是唯一索引,index加快搜索
var mongoose = require("mongoose");
var BookSchema = new mongoose.Schema({
isbn:{
type:String,
unique:true
},
name:{
type:String,
index:true
}
})
定义静态方法
var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/p10',{useNewUrlParser:true},function(err){
if(err){
console.log("connect fail");
}
else{
console.log("connect succ");
}
});
var BookShema = new mongoose.Schema({
name:String,
isbn:Number
});
BookShema.static.findByISBN=function(isbn,cb){
this.findOne({isbn:isbn},function(err,doc){
cb(err,doc);
});
};
var Book = mongoose.model("Book",BookShema);
var book = new Book({
name:"mean jfiajf",
isbn:45451515
});
book.save(function(err){
if (err){
return console.log("save book faid");
}
book.findByISBN(45451515,function(err,doc){
console.log("find isbn,err,doc:",err,doc)
})
})
数据校验
在定义模板的时候自带的校验
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/p10",{useNewUrlParser:true},function(err){
if(err){
console.log("connect faild");
}
else{
console.log("connect succ");
}
});
var OrderSchema = new mongoose.Schema({
count:{
type:Number,
required:true,
max:100,
min:10
},
status:{
type:String,
enum:['created','succes','failed']
},
desc:{
type:String,
match:/book/g
}
});
var Order = mongoose.model("Order",OrderSchema);
var order = new Order();
order.count = 100;
order.status = 'failed';
order.desc ='/book/goos';
order.save(function(err){
if(err){
console.log("save faild",err);
}
else{
console.log("sava succ")
}
})
中间件
预处理中间件和处理完成之后的中间件demo
var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/p10',{useNewUrlParser:true},function(err){
if (err){
console.log("connect faild");
}
else{
console.log("connect succ");
}
});
var ResellerShema = new mongoose.Schema({
address:String
});
ResellerShema.post("save",function(next){
console.log("这是保存之后进行的操作的中间件");
next();
});
ResellerShema.pre("save",true,function(next,done){
console.log("预处理中间件");
next();
done();
});
var Reseller = mongoose.model("Reseller",ResellerShema);
var reseller = new Reseller({
address:"上海,人民路",
});
reseller.save()