mongoose 操作mongodb数据库二

扩展schema静态方法和实例方法


var UserModel=require('./model/user.js');


// var user = new UserModel({
//     name: '赵六',
//     sn:'123456781',
//     age: 29
// });
// user.save();




// UserModel.findBySn('123456781',function(){}) 


// 静态方法this指向model
UserModel.findBySn('123456782',function(err,docs){

    if(err){

        console.log(err);

        return;
    }
    console.log(docs)
})




var user = new UserModel({
    name: '赵六',
    sn:'123456781',
    age: 29
});
// user.save();


user.print();   //自定义的实例方法,this指向实例
var mongoose=require('./db.js');


var UserSchema=mongoose.Schema({
    
    name:{
        type:String       
    },
    sn:{
        type:String,
        index:true
    },
    age:Number,       
    status:{
        type:Number,
        default:1

    }
})
//静态方法 

UserSchema.statics.findBySn=function(sn,cb){


    //通过 find方法获取 sn的数据    this 关键字获取当前的model


    this.find({"sn":sn},function(err,docs){
        cb(err,docs)
    })   


}



// 实例方法   (基本不用)

UserSchema.methods.print=function(){


    console.log('我是一个实例方法')

    console.log(this.name)
}






module.exports=mongoose.model('User',UserSchema,'user');


var mongoose=require('./db.js');


//mongoose数据校验:用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证

//mongoose里面定义Schema:字段类型,修饰符、默认参数 、数据校验都是为了数据库数据的一致性



//Schema,为数据库对象的集合,每个schema会映射到mongodb中的一个collection,定义Schema可以理解为表结构的定义

var UserSchema=mongoose.Schema({
    name:{
        type:String,//指定类型
        trim:true,   //修饰符         
        required:true      
    },
    sn:{
        type:String,
        index:true,  //索引.
        set(val){  //自定义修饰符
            return val;
        },

        // maxlength:20,
        // minlength:10
        // match:/^sn(.*)/ ,
        validate: function(sn) {
            return sn.length >= 10;
        }        
        
    },   
    age:{
        type:Number,
        min:0,    //用在number类型上面
        max:150
    },       
    status:{
        type:String, 
        default:'success', //默认值
        enum:['success','error']   //status的值必须在 对应的数组里面  注意枚举是用在String
    }
})


module.exports=mongoose.model('User',UserSchema,'user');

schema中获取_id   mongoose.Types.ObjectId

/*
db.order.aggregate([
    {
      $lookup:
        {
          from: "order_item",
          localField: "order_id",
          foreignField: "order_id",
          as: "items"
        }
   },
{
    $match:{"all_price":{$gte:90}}
}

])

*/

/*查询order_item,找出商品名称是酸奶的商品,酸奶这个商品对应的订单的订单号以及订单的总价格*/


var OrderItemModel=require('./model/order_item.js');

var OrderModel=require('./model/order.js');

var mongoose=require('mongoose');

//第一种实现方式
/*
    OrderItemModel.find({"_id":"5b743da92c327f8d1b360546"},function(err,docs){

        // console.log(docs);

        var order_item=JSON.parse(JSON.stringify(docs));

        var order_id=order_item[0].order_id;


        OrderModel.find({"order_id":order_id},function(err,order){

            //    console.log(order);

            order_item[0].order_info=order[0];


            console.log(order_item)
        })
    })

*/

//第二种方式 

//mongoose中获取ObjectId           mongoose.Types.ObjectId

OrderItemModel.aggregate([

    {
      $lookup:
        {
          from: "order",
          localField: "order_id",
          foreignField: "order_id",
          as: "order_info"
        }
   },{
    $match:{_id: mongoose.Types.ObjectId('5b743da92c327f8d1b360546')}

   }

],function(err,docs){

        if(err){

            console.log(err)
            return;
        }

        console.log(JSON.stringify(docs))


})
/*
db.order.aggregate([
    {
      $lookup:
        {
          from: "order_item",
          localField: "order_id",
          foreignField: "order_id",
          as: "items"
        }
   },
{
    $match:{"all_price":{$gte:90}}
}

])

*/







var OrderModel=require('./model/order.js');


//查询order 表的数据

/*
    OrderModel.find({},function(err,docs){

        console.log(docs);

    })
*/



//order表关联order_item
OrderModel.aggregate([

    {
        $lookup:
          {
            from: "order_item",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
          }
     },
     {
        $match:{"all_price":{$gte:90}}
     }

],function(err,docs){

    if(err){

        console.log(err);
        return;
    }

    console.log(JSON.stringify(docs))
})

猜你喜欢

转载自blog.csdn.net/qfxlw/article/details/84989342
今日推荐