Skip to content

eggjs/egg-mongoose

Folders and files

NameName
Last commit message
Last commit date

Latest commit

6586f7d · Sep 21, 2023

History

45 Commits
Sep 21, 2023
Feb 16, 2017
May 13, 2019
Sep 21, 2023
Sep 21, 2023
May 9, 2018
Feb 16, 2017
Feb 16, 2017
Feb 16, 2017
Sep 21, 2023
Oct 16, 2020
Feb 16, 2017
Aug 12, 2023
Mar 2, 2018
Mar 2, 2018
Aug 12, 2023
Sep 21, 2023

Repository files navigation

egg-mongoose

NPM version Run tests Test coverage Known Vulnerabilities npm download

Egg's mongoose plugin.

Install

npm i egg-mongoose --save

Configuration

Change {app_root}/config/plugin.js to enable egg-mongoose plugin:

exports.mongoose = {
  enable: true,
  package: 'egg-mongoose',
};

Simple connection

Config

// {app_root}/config/config.default.js
exports.mongoose = {
  url: 'mongodb://127.0.0.1/example',
  options: {},
  // mongoose global plugins, expected a function or an array of function and options
  plugins: [createdPlugin, [updatedPlugin, pluginOptions]],
};
// recommended
exports.mongoose = {
  client: {
    url: 'mongodb://127.0.0.1/example',
    options: {},
    // mongoose global plugins, expected a function or an array of function and options
    plugins: [createdPlugin, [updatedPlugin, pluginOptions]],
  },
};

Example

// {app_root}/app/model/user.js
module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;

  const UserSchema = new Schema({
    userName: { type: String  },
    password: { type: String  },
  });

  return mongoose.model('User', UserSchema);
}

// {app_root}/app/controller/user.js
exports.index = function* (ctx) {
  ctx.body = yield ctx.model.User.find({});
}

Multiple connections

Config

// {app_root}/config/config.default.js
exports.mongoose = {
  clients: {
    // clientId, access the client instance by app.mongooseDB.get('clientId')
    db1: {
      url: 'mongodb://127.0.0.1/example1',
      options: {},
      // client scope plugin array
      plugins: []
    },
    db2: {
      url: 'mongodb://127.0.0.1/example2',
      options: {},
    },
  },
  // public scope plugin array
  plugins: []
};

Example

// {app_root}/app/model/user.js
module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;
  const conn = app.mongooseDB.get('db1'); 

  const UserSchema = new Schema({
    userName: { type: String },
    password: { type: String },
  });

  return conn.model('User', UserSchema);
}

// {app_root}/app/model/book.js
module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;
  const conn = app.mongooseDB.get('db2');

  const BookSchema = new Schema({
    name: { type: String },
  });

  return conn.model('Book', BookSchema);
}

// app/controller/user.js
exports.index = function* (ctx) {
  ctx.body = yield ctx.model.User.find({}); // get data from db1
}

// app/controller/book.js
exports.index = function* (ctx) {
  ctx.body = yield ctx.model.Book.find({}); // get data from db2
}

Default config

see config/config.default.js for more detail.

Multi-mongos support

// {app_root}/config/config.default.js
exports.mongoose = {
  client: {
    url: 'mongodb://mongosA:27501,mongosB:27501',
    options: {
      mongos: true,
    },
  },
};

Questions & Suggestions

Please open an issue here.

Contribution

If you are a contributor, follow CONTRIBUTING.

License

MIT

Contributors


jtyjty99999


popomore


atian25


dead-horse


BaffinLee


trylovetom


ChangedenCZD


hardywu


JasinYip


netputer


Wai-Dung


duncup


jinasonlin


legendecas


lzqmyb


DevXiaolan


villins

This project follows the git-contributor spec, auto updated at Sat Aug 12 2023 11:16:17 GMT+0800.