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