mongoose 操作mongodb資料庫二
阿新 • • 發佈:2018-12-29
擴充套件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))
})