egg.js连接和使用Mongodb
一、方法一
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的更多相关文章
- 在egg.js中使用mongodb
1.egg.js官网只推荐了mysqle,要用mongodb得另找资料.通过查找,大家都在用Mongoose连接,于是乎学习. 网站链接:https://www.npmjs.com/package/e ...
- Node.js连接MongoDB数据库
首先要启动MongoDB服务器 先找到你的mongoDb安装目录,我的如下:就在bin文件夹下创建一个data文件夹,data内包含两个空文件夹,如下: 接着回到bin文件夹处,按住shift键,右击 ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- node.js连接MySQL操作及注意事项
node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...
- node.js操作数据库之MongoDB+mongoose篇
前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...
- Serverless + Egg.js 后台管理系统实战
本文将介绍如何基于 Egg.js 和 Serverless 实现一个后台管理系统 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个 ...
- egg.js in action
egg.js in action fullstack https://github.com/eggjs/egg/ cli config router service midlewares HTTP C ...
- Node.js连接Mysql,并把连接集成进Express中间件中
引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
随机推荐
- centos7启动顺序加密的问题
在上一篇博客中我们说的是如何进入单用户模式,这篇我主要来讲centos7启动加密. 首先我们来说centos的启动顺序: 上一篇我们所说的进入单用户模式,就是在boot loader 这一层次下进入的 ...
- 网络请求 爬虫学习笔记 一 requsets 模块的使用 get请求和post请求初识别,代理,session 和ssl证书
前情提要: 为了养家糊口,为了爱与正义,为了世界和平, 从新学习一个爬虫技术,做一个爬虫学习博客记录 学习内容来自各大网站,网课,博客. 如果觉得食用不良,你来打我啊 requsets 个人觉得系统自 ...
- centos安装 Anaconda3及使用
下载安装 下载地址https://www.anaconda.com/download/ 旧版本下载https://repo.continuum.io/archive/ 比如下载Anaconda3-4. ...
- docker学习(2)--基础命令
转载请注明源出处:http://www.cnblogs.com/lighten/p/6875355.html 1.基本命令 搭建好docker环境之后,使用docker help命令查看docker的 ...
- SELECT列表中的标量子查询
发现了一种表连接新的写法,以前还没有这样写过或者见别人写过.跟同学聊天他们公司却很多人这样写,看来真的要学学sql了 表 CREATE TABLE `t_book` ( `FId` ) NOT NUL ...
- SpringAOP-基于@AspectJ的简单入门
一.AOP的基本概念: 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,Spring只支持方法执行连接点,在A ...
- 关于Gen生成try-catch-finally
例1: class TestExc extends Exception{} void tryItOut () throws TestExc{} void handleExc(Object o){} v ...
- 关于注解Annotation第二篇
写一个注解使用类,如下: public class Test { @Code(author = "mazhi",date="20170611") private ...
- ES6-Array
/* * 数组解构赋值: * ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这种被称为解构. * 示例如下: */ var [a,b,c] = [1,2,3]; console.log ...
- java学习-struts基础(一)
struts发展 struts是Apache软件基金会赞助的一个开源项目,是一个基于Java EE的MVC开源实现. 它为Servlet/JSP技术的应用提供技术框架2001.7--Struts1正式 ...