egg.js鏈接和使用Mongodb

1、Egg鏈接Mongodb方法一

 

Cnpm i egg-momgo-native  --save

 

Plugin.js中配置sql

exports.mongo = {
enable: true,
package: 'egg-mongo-native',
};

Config.default.js配置mongodb

config.mongo = {
client: {
host:"127.0.0.1",
port:"27017",
name:"test",
user:"",
password:"",
options:{},
}
}

查詢語句使用數據庫

var result = await this.app.mongo.find('users')

 

2、Egg中Mongoose的使用

https://www.npmjs.com/package/egg-mongoosenpm

配置app

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.jsnosql

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的創建mongoose

增長數據ui

Let addResult=this.ctx.request.body;
Let  admin=new this.ctx.model.Order(addResult);
admin.save();

修改數據this

await this.ctx.model.Admin.updateOne({"_id":id},{
mobile,email,role_id})

查詢url

 

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
}

])
相關文章
相關標籤/搜索