egg-mongoose
Egg's mongoose plugin.
Notice
The version of Egg's mongoose plugin add two new features, place the model files in the location you want and rename the delegate property to Context
. It published for the original one seems like not to be maintained by the maintainers. When the original one merge the reuqest, you can also use the original one.
Install
$ npm i @onewalker/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 = {
//baseDir:'model', //models in `app/${model}`
//delegate:'model' //lood to `app[delegate]`
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.