nodejs与mongoose

链接数据库

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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值