egg连接MongoDB数据库
- $ npm install egg-mongoose --save
- 开启插件config/plugin.js
mongoose: {
enable: true,
package: 'egg-mongoose'
}
- mongo配置信息config.default.js
// 单个数据库配置
config.mongoose = {
client: {
url: 'mongodb://127.0.0.1/user', // user是collection(数据库)名称
options: {}, // 其他配置项
}
}
// 多个数据库配置
config.mongoose = {
clients: {
// db1 数据库别名
db1: {
url: 'mongodb:127.0.0.1/user',
options: {},
},
db2: {
url: 'mongodb:127.0.0.1/goods',
options: {},
}
}
}
- 设计模块app/model/UserInfo.js
'use strict';
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const userSchema = new Schema({
// 设计文档字段
username: { type: String },
userpassword: { type: String },
});
// 第一个参数是跟 model 对应的集合( collection )名字的 单数 形式。
// Mongoose 会自动找到名称是 model 名字 复数 形式的 collection
// .model() 这个函数是对 schema 做了拷贝(生成了 model)。
// 要确保在调用 .model() 之前把所有需要的东西都加进 schema 里了
// 相当于sql的设计表的字段
// 第三个参数就是集合(数据表)的名字,如果省略mongoose会自动找到UserInfos
return mongoose.model('UserInfo', userSchema, 'userInfo');
};
// 当配置了多个数据库的时候,那么就需要先连接对应的数据库
module.exports = app => {
const mongoose = app.mongoose;
// 连接数据库
const connect = app.mongooseDB.get('db1') // config配置的数据库别名
const UserSchema = new mongoose.Schema({
username: { type: String },
userpassword: { type: String },
})
// 返回的时候使用connect调用model
return connect.model('User', UserSchema)
}
router.post('mongo', controller.mongo.tools)
'use strict';
const Controller = require('egg').Controller;
class MongoController extends Controller {
async tools() {
// 假设请求的参数为{username: 'jack', userpassword: '123456'}
const query = this.ctx.request.body;
const result = await this.ctx.service.mongo.tools(query);
this.ctx.response.body = result;
}
}
module.exports = MongoController;
'use strict';
const Service = require('egg').Service;
class MongoService extends Service {
async tools(query) {
// model: 在设计模块时创建文件夹的名字
// UserInfo: 在设计模块时创建的js文件的名字
// 注意,当你文件名字为小写时候userInfo,在调用的时候必须调用首字母大写UserInfo
const result = await this.ctx.model.UserInfo.insertMany(query); // 插入多条文档
const result = await this.ctx.model.UserInfo.create(query); // 插入一条
const result = await this.ctx.model.UserInfo.updateOne(query) // 删除一条文档
// 修改一条文档
{$gt操作符查看](https://www.mongodb.org.cn/manual/query-evaluation/)
const result = await this.ctx.model.UserInfo.updateOne({age: {$gt: 18}}, { isAdult: true });
// 查询满足条件所有文档
const result = await this.ctx.model.UserInfo.find(query);
return result;
}
}
module.exports = MongoService;