egg关于mongodb的使用
原创大约 1 分钟
安装
npm install egg-mongoose --save
配置
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
Egg连接mongoose
config.mongoose = {
url: 'mongodb://127.0.0.1/website',
};
定义数据表
// 用户表
module.exports = app => {
const Schema = app.mongoose.Schema({
merchant: String, // 商户号
userId: String, // 支付宝唯一ID 或 微信唯一ID
userType: String, // alipay wechat
info: Object, // 支付宝或微信返回的基础信息
accessToken: String, // 访问token
refreshToken: String, // 刷新token
});
Schema.index({ merchant: 1, userId: 1 });
return app.mongoose.model('User', Schema, 'User');
};
解释:其中type表示字段类型,Mongoose 有以下几种类型Number(数字),String(字符串),Boolean(布尔值),ObjectId(对象ID),Array(数组),Object(对象),Date(日期)
增加
this.ctx.model.Article.create(post,callback);
解释:其中post为json数据结构,callback为操作后的回调函数
删除
this.ctx.model.Article.remove(conditions);
更新
this.ctx.model.Article.update(conditions, update)
参数1:查询条件, 参数2:更新对象,可以使用MondoDB的更新修改器
查询
this.ctx.model.Ariticle.find(conditions,{option})
this.ctx.model.Ariticle.findOne(conditions,{option})
解析: conditions: 查询的条件 option: 需要查询的字段:1表示要查询,-1表示不查询
分页和联表
let orderResult = ctx.model.Order.find(data)
.populate({ path: 'userId' })
.populate({ path: 'commodityId', seclect: 'merchant categoryId no info', populate: { path: 'categoryId' } });
const total = await ctx.model.Order.count();
orderResult = orderResult
.skip((currentPage - 1) * pageSize)
.limit(pageSize).sort({createTime: 1});
const orderData = await orderResult.exec();
相关mongodb的的文档官网