选择主题

选择导航背景

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

})