eggjs项目中使用egg-mongoose数据库

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)
}
  • app/router.js
router.post('mongo', controller.mongo.tools)
  • app/controller/mongo.js
  '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;

  • app/service/mongo.js
'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;

更多配置信息,查看mongoose中文网

posted @   前端之旅  阅读(3258)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示