1. 程式人生 > >mongoose 操作mongodb資料庫二

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