一、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 |
|
常用表达式操作符 |
De ion |
|
$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 } ])
继续阅读与本文标签相同的文章
上一篇 :
R基础入门(1)——搭建运行环境
-
ASP.NET Core on K8S深入学习(8)数据管理
2026-05-19栏目: 教程
-
AI翻译新思路,OBTranslate打破非洲城乡居民之间的沟通差距
2026-05-19栏目: 教程
-
物联网平台实用技巧:调用API获取设备状态
2026-05-19栏目: 教程
-
路漫漫其修远兮,吾将上下而求索
2026-05-19栏目: 教程
-
Kerberos使用OpenLDAP作为backend
2026-05-19栏目: 教程
