egg关于mongodb的使用

WuYiLong原创大约 1 分钟nodeegg

安装

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的的文档官网open in new window

上次编辑于:
贡献者: wuyilong