一、方法一 

Egg连接Mongodb

 

Cnpm i egg-mongo-native  --save

Plugin.js中配置

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

Config.default.js配置

config.mongo = {
client: {
host:"127.0.0.1",
port:"",
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: //索引
set(parmas){
if(parmas.indexOf('http://')==){
return 'http://'+parmas
}
return parmas
}

数据校验

Required
Max
Min
Enum 枚举类型
Match 增加的数据必须符合match正则
Maxlength 最大值
Minlength 最小值
Name:{
Type:string
Required:true,
Min:,
Max:,
Enum:[,,,], 枚举类型
Match:/sn(.*)/i //必须sn开头
}
自定义方法
validate:function(desc){
return desc.length>=;
}

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':}
}
])

聚合管道的使用

db.order.aggregate([
{
$project:{ trade_no:, all_price: }
},
{
$match:{"all_price":{$gte:}}
},
{
$sort:{"all_price":-}
},
{
$skip:
} ])

egg.js连接和使用Mongodb的更多相关文章

  1. 在egg.js中使用mongodb

    1.egg.js官网只推荐了mysqle,要用mongodb得另找资料.通过查找,大家都在用Mongoose连接,于是乎学习. 网站链接:https://www.npmjs.com/package/e ...

  2. Node.js连接MongoDB数据库

    首先要启动MongoDB服务器 先找到你的mongoDb安装目录,我的如下:就在bin文件夹下创建一个data文件夹,data内包含两个空文件夹,如下: 接着回到bin文件夹处,按住shift键,右击 ...

  3. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...

  4. node.js连接MySQL操作及注意事项

    node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...

  5. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  6. Serverless + Egg.js 后台管理系统实战

    本文将介绍如何基于 Egg.js 和 Serverless 实现一个后台管理系统 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个 ...

  7. egg.js in action

    egg.js in action fullstack https://github.com/eggjs/egg/ cli config router service midlewares HTTP C ...

  8. Node.js连接Mysql,并把连接集成进Express中间件中

    引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...

  9. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

随机推荐

  1. linux文件的硬连接和软连接

    建立软连接:ln -s 原路径 目标路径 原理示意图: 特点: 1.     相当于win中的快捷方式 2.     删除链接文件,源文件不受影响 3.     删除源文件,链接文件失效 4.     ...

  2. JS:事件委托

    事件委托 事件流 事件流描述的是从页面中接收事件的顺序.---JS高级程序设计(第3版) DOM Level 2 Events规定的事件流有三个阶段:①事件捕获阶段.②处于目标阶段.③事件冒泡阶段 事 ...

  3. 【PaddlePaddle系列】CIFAR-10图像分类

    前言 本文与前文对手写数字识别分类基本类似的,同样图像作为输入,类别作为输出.这里不同的是,不仅仅是使用简单的卷积神经网络加上全连接层的模型.卷积神经网络大火以来,发展出来许多经典的卷积神经网络模型, ...

  4. 剑指offer五十四之字符流中第一个不重复的字符

    一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  5. 【Java】认识 JDK,JRE,JVM

    JDK,JRE,JVM 今天我们讨论下这三个Java工具 JDK 全称Java Development ToolKit(Java 开发工具包). JDK是整个JAVA的核心,其包括了Java运行环境( ...

  6. (转)AIX rootvg 镜像创建与磁盘更换

    # prtconf | grep disk # chdev -l hdisk1 -a pv=yes # extendvg rootvg hdisk1 # chvg -Qn rootvg # lsvg ...

  7. 如何安装windows7

    前因:之前安装的win7的系统,用了激活工具,刚开始的几个星期还没察觉有何问题.直到有天系统给出异常提示:系统资源不足,无法完成请求的服务.仔细排查之后发现是系统内核句柄数一直增加不释放,句柄数大概有 ...

  8. 再学Java 之 解决No enclosing instance of type * is accessible

    深夜,临睡前写了个小程序,出了点小问题 public class Test_drive { public static void main(String[] args){ A a = new A(); ...

  9. ubuntu16.04搭建hadoop集群环境

    1. 系统环境Oracle VM VirtualBoxUbuntu 16.04Hadoop 2.7.4Java 1.8.0_111 master:192.168.19.128slave1:192.16 ...

  10. 【Java并发编程】:死锁

    当线程需要同时持有多个锁时,有可能产生死锁.考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2.接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持 ...