Mysql
一、安装配置
$ npm i --save egg-mysql
// config/plugin.js 开启插件
exports.mysql = {
enable: true,
package: 'egg-mysql',
};
egg-monogoose
一、安装配置
$ npm i egg-mongoose --save
// {app_root}/config/plugin.js
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
// {app_root}/config/config.default.js
module.exports = {
mongoose: {
url: 'mongodb://127.0.0.1:27017/ibg_node_core',
options: {
db: { native_parser: true },
server: { poolSize: 5 },
user: 'core',
pass: 'we123',
},
},
}
// 多个mongos配置
// {app_root}/config/config.default.js
exports.mongoose = {
url: 'mongodb://mongosA:27501,mongosB:27501',
options: {}
};
// log
module.exports = {
logger: {
dir: '/home/admin/logs/demoapp', // logger文件的目录
level: 'DEBUG', // 开deubg模式
},
};
二、定义Schema
// app/modle/reportWarningConfig.js
module.exports = app => {
const mongoose = app.mongoose;
const ReportWarningConfigSchema = new mongoose.Schema({
actionCode: { type: String, unique: true, trim: true }, // 动作编码
interval: { type: Number, default: 1800 }, // 扫描间隔时间,单位:秒 默认 30分钟
emailConfig: { // 发送邮件条件
appKey: { type: String, default: '', trim: true },
appSecret: { type: String, default: '', trim: true },
recipient: { type: [String] }, // 收件人
},
lastExecutedTime: { type: Date, default: Date.now }, // 最近执行时间
},
{
timestamps: true, // 设置timestamps,多加两个字段createdTime、updatedTime,来记录插入时间和更新时间
collection: 'report_warning_config',
}
);
return mongoose.model('ReportWarningConfig', ReportWarningConfigSchema);
};
三、常用语句
1、await app.model.login.find(条件): 返回的是一组数据, []
2、await app.model.login.findOne(条件): 只返回一条数据, 如果没有匹配的返回null,
3、await app.model.login.update(条件, 要更新的文档, 回调方法): 更新数据
4、let loginTask = new app.model.login({ username: 'siguang', password: 'ssssss'});
let doc = await loginTask.save(); // 插入数据
5、exec(callback): 在查询、更新后会执行一个回调函数来查看是否成功执行
6、save(function(err, kitten){ }): 存储
四、Example
1、查询
async queryMonitorTask(){
let monitorTaskList = await app.model.ReportWarningConfig.find(); // app.model.ReportWarningConfig 来指定用哪个文档
return app.renderBody({
statusType: app.statusType.success,
data: {
list: monitorTaskList
}
});
}
2、更新
更新需要先将文档查回来后,在修改某一个字段,如果一直更新会覆盖
async updateMonitorTask(params){
let response;
let condition = {_id: params.id};
let doc = await app.model.ReportWarningConfig.findOne(condition); // 通过id来取到当前数据
if(doc){
doc.interval = params.interval;
doc.emailConfig.recipient = params.emailRecipient;
doc.smsConfig.recipient = params.smsRecipient;
await doc.save();
response = app.renderBody({
statusType: error,
error: error,
});
}
else{
response = app.renderBody({
statusType: app.statusType.error,
error: doc,
});
}
return response;
}
3、插入数据
插入数据将使用save()
async insertMonitorTask(){
const {ctx, app, service} = this;
const {actionCode, interval, emailRecipient, smsRecipient} = ctx.request.body;
// 将要插入的数据加到model中
let monitorTask = new app.model.ReportWarningConfig({ // 注意这里使用new
actionCode,
interval,
emailConfig: {
recipient: emailRecipient
},
smsConfig: {
recipient: smsRecipient
}
})
// 使用save()来插入
let doc = await monitorTask.save();
let response = app.renderBody({
statusType: app.statusType.success,
data: doc._id
});
ctx.body = response;
}
mongoose 积累
一、查询出来的数据不能修改
async getNewsContent(params){
let doc = await app.model.News.findOne({_id: params.id});
// 不能直接修改doc的对象,需要通过toObject()方法来转成对象的形势
let newDoc = doc.toObject();
newDoc.createdAt = app.dateFormat(new Date(newDoc.createdAt).getTime(), 'yyyy-MM-dd hh:mm:ss')
newDoc.updatedAt = app.dateFormat(new Date(newDoc.updatedAt).getTime(), 'yyyy-MM-dd hh:mm:ss')
console.log(`ResponseAAA ----- ${JSON.stringify(newDoc)}`)
return {
data: newDoc,
message: '获取成功',
status: 0
}
}
| https://github.com/eggjs/egg-mongoose
国内查看评论需要代理~