egg.js连接和使用Mongodb

Posted 科比net

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了egg.js连接和使用Mongodb相关的知识,希望对你有一定的参考价值。

一、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:[email protected]: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
}

])

 


以上是关于egg.js连接和使用Mongodb的主要内容,如果未能解决你的问题,请参考以下文章

egg.js连接数据库 sequlize动态创建表

egg.js连接数据库 sequlize动态创建表

Egg.js搭建后台服务API

egg.js 中使用 egg-mysql 操作 mysql 数据库

egg.js会导致sql注入吗

egg.js整合socket.io