1. 安装模块
npm i egg-mongo-native --save
2. 配置插件
// config/plugin.js
'use strict';
exports.ejs = {
enable: true,
package: 'egg-view-ejs',
};
// 添加egg-mongo-native插件
exports.mongo = {
enable: true,
package: 'egg-mongo-native',
};
3. 配置数据库
// config/config.default.js
'use strict';
module.exports = appInfo => {
const config = exports = {};
// use for cookie sign key, should change to your own and keep security
config.keys = appInfo.name + '_1534304805936_5738';
// add your config here
config.middleware = [];
exports.view = {
mapping: {
'.html': 'ejs',
},
};
// 配置数据库
exports.mongo = {
client: {
host: '127.0.0.1',
port: '27017',
name: 'database',
user: 'admin',
password: '123456',
options: {},
},
};
return config;
};
4. 操作数据库
// app/controller/news.js
'use strict';
// 引入模块,实现可以按ID操作数据库
var ObjectID = require('mongodb').ObjectID;
const Controller = require('egg').Controller;
class NewsController extends Controller {
async index() {
// 和数据库打交道建议放在服务里面
// 1.增加数据
var insertResult = await this.app.mongo.insertOne('users', {
doc: { name: '李四', age: 20, sex: 1 }
})
// 2.删除数据
var deleteResult = await this.app.mongo.findOneAndDelete('users', {
filter: { "name": "赵六" }
})
// 3.修改数据
var updateResult = await this.app.mongo.findOneAndUpdate('users', {
filter: { "name": "王五" },
update: {
$set: { name: '赵六', age: 100 }
}
})
// 4.查找数据
var findResult = await this.app.mongo.find('users', {
query: { "name": "张三" },
limit: 1
});
// 5.按ID查找的数据
var findResultById = await this.app.mongo.find('users', {
query: { "_id": ObjectID('5b72abc7e4f0720a68f05b41') }
});
// 6.多表关联查询
var aggregateResult = await this.app.mongo.aggregate('order', {
pipeline: [
{
$lookup:
{
from: "order_item",
localField: "order_id",
foreignField: "order_id",
as: "items"
}
},
{
$match: { "all_price": { $gte: 90 } }
},
{
$limit: 2
}
],
// 其它的操作,如:是否为执行查询分析
options: {}
})
this.ctx.body = '新闻页面';
}
}
module.exports = NewsController;
5. 定义扩展实现全局的按ID操作数据库
定义扩展。
// app/extend/application.js
var ObjectID = require('mongodb').ObjectID;
module.exports = {
getObjectID(params) {
// this 就是 app 对象,在其中可以调用 app 上的其他方法,或访问属性
return ObjectID(params)
}
};
用定义的全局扩展按ID操作数据库。
// app/controller/home.js
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
// 和数据库打交道建议放在服务里面
// 按ID查找
var findResult = await this.app.mongo.find('users', {
query:{ "_id": this.app.getObjectID('5b72abc7e4f0720a68f05b41')}
});
// 按ID删除
var deleteResult = await this.app.mongo.findOneAndDelete('users', {
filter:{"_id": this.app.getObjectID('5b72ad791c2ba42e6c5a4a78')}
});
this.ctx.body = '个人中心页面';
}
}
module.exports = HomeController;