一、Egg連接Mongodb方法一 Plugin.js中配置 Config.default.js配置 查詢語句使用 二、Egg中Mongoose的使用 https://www.npmjs.com/package/egg-mongoose 配置 Schema的建立數據表集合的映射新建app/modul ...
一、Egg連接Mongodb方法一
Cnpm i egg-momgo-native --save
Plugin.js中配置
exports.mongo = { enable: true, package: 'egg-mongo-native', };
Config.default.js配置
config.mongo = { client: { host:"127.0.0.1", port:"27017", name:"test", user:"", password:"", options:{}, } }
查詢語句使用
var result = await this.app.mongo.find('users')
二、Egg中Mongoose的使用
https://www.npmjs.com/package/egg-mongoose
配置
npm i egg-mongoose --save
exports.mongoose = { enable: true, package: 'egg-mongoose', }; //config中配置mongose連接mongodb資料庫 Mongodb://eggadmin:123456@localhost:27017 //有用戶名密碼的情況 exports.mongoose = { client: { url: 'mongodb://127.0.0.1/eggxiaomi', options: { useNewUrlParser: true, }, } };
Schema的建立數據表集合的映射新建app/module文件夾新增 order.js
module.exports = app => { const mongoose = app.mongoose; const Schema = mongoose.Schema; const OrderSchema = new Schema({ order_id: { type: String }, uid: { type: String }, trade_no: { type: String }, all_price: { type: Number }, all_num: { type: Number }, }); return mongoose.model('Order', OrderSchema,'order'); //返回model }
Model的建立
增加數據
Let addResult=this.ctx.request.body; Let admin=new this.ctx.model.Order(addResult); admin.save();
修改數據
await this.ctx.model.Admin.updateOne({"_id":id},{ mobile,email,role_id})
查詢
Let id=this.ctx.request.query.id; Let result=await this.ctx.model.Admin.find({"_id":id});
刪除數據
await this.ctx.model[model].deleteOne({"_id":id});
數據預設
Mongoose 預定義模式修飾符,可以對我們增加的數據進行一些格式 Lowercase uppercase trim Set()//建議使用mongoose,增加數據時匹配 Sn:{ Type:string Trim:true //是否去掉空格 index:1 //索引 set(parmas){ if(parmas.indexOf('http://')==0){ return 'http://'+parmas } return parmas }
數據校驗
Required Max Min Enum 枚舉類型 Match 增加的數據必須符合match正則 Maxlength 最大值 Minlength 最小值 Name:{ Type:string Required:true, Min:0, Max:150, Enum:[0,1,2,3], 枚舉類型 Match:/sn(.*)/i //必須sn開頭 } 自定義方法 validate:function(desc){ return desc.length>=10; }
Mongoose中多對多的數據查詢,和aggregate聚合管道
管道操作 |
|
$project |
增加,刪除,重命名欄位 |
$match |
條件匹配,只滿足條件的文檔才能進入下一階段 |
$limit |
限制結果的數量 |
$skip |
跳過文檔的數量 |
$sort |
條件排序 |
$group |
條件組合結果 統計 |
$lookup |
用以引入其它集合的數據 |
sql和nosql對比
Where |
$match |
group |
$group |
having |
$match |
select |
$project |
Order by Limit |
$sort $limit |
Sum() |
$sum |
Count() |
$sum |
join |
$lookup |
常用表達式操作符 |
Description |
$addToSet |
將文檔指定欄位的值去重 |
$max |
文檔指定欄位的最大值 |
$min |
文檔指定欄位的最小值 |
$sum |
文檔指定欄位求和 |
$avg |
文檔指定欄位求平均 |
$gt |
大於給定值 |
$lt |
小於給定值 |
$eq |
等於給定值 |
var result=await this.ctx.model.Admin.aggregate([{ $lookup:{ from:'role', localField:'role_id', foreignField:'_id', as:'role' } }, { $match:{'role_id':10} } ])
聚合管道的使用
db.order.aggregate([ { $project:{ trade_no:1, all_price:1 } }, { $match:{"all_price":{$gte:90}} }, { $sort:{"all_price":-1} }, { $skip:1 } ])