[![NPM version][npm-image]][npm-url]
|
[![NPM quality][quality-image]][quality-url]
|
[![build status][travis-image]][travis-url]
|
[![Test coverage][codecov-image]][codecov-url]
|
[![David deps][david-image]][david-url]
|
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
[![npm download][download-image]][download-url]
|
|
[npm-image]: https://img.shields.io/npm/v/egg-mongo-native.svg?style=flat-square
|
[npm-url]: https://npmjs.org/package/egg-mongo-native
|
[quality-image]: http://npm.packagequality.com/shield/egg-mongo-native.svg?style=flat-square
|
[quality-url]: http://packagequality.com/#?package=egg-mongo-native
|
[travis-image]: https://img.shields.io/travis/brickyang/egg-mongo-native.svg?branch=master&style=flat-square
|
[travis-url]: https://travis-ci.org/brickyang/egg-mongo-native
|
[codecov-image]: https://img.shields.io/codecov/c/github/brickyang/egg-mongo-native.svg?style=flat-square
|
[codecov-url]: https://codecov.io/github/brickyang/egg-mongo-native?branch=master
|
[david-image]: https://img.shields.io/david/brickyang/egg-mongo-native.svg?branch=master&style=flat-square
|
[david-url]: https://david-dm.org/brickyang/egg-mongo-native?branch=master
|
[snyk-image]: https://snyk.io/test/npm/egg-mongo-native/badge.svg?style=flat-square
|
[snyk-url]: https://snyk.io/test/npm/egg-mongo-native
|
[download-image]: https://img.shields.io/npm/dm/egg-mongo-native.svg?style=flat-square
|
[download-url]: https://npmjs.org/package/egg-mongo-native
|
|
[**中文版**](https://github.com/brickyang/egg-mongo/blob/master/README.zh_CN.md)
|
|
Users who don't use Egg.js could use [easy-mongodb](https://github.com/brickyang/easy-mongodb).
|
|
This plugin base on
|
[node-mongodb-native](https://github.com/mongodb/node-mongodb-native), provides
|
the official MongoDB native driver and APIs.
|
|
It wraps some frequently-used API to make it easy to use but keep all properties
|
as it is. For example, to find a document you need this with official API
|
|
```js
|
db.collection('name')
|
.find(query, options)
|
.skip(skip)
|
.limit(limit)
|
.project(project)
|
.sort(sort)
|
.toArray();
|
```
|
|
and with this plugin
|
|
```js
|
app.mongo.find('name', { query, skip, limit, project, sort, options });
|
```
|
|
## Install
|
|
```bash
|
$ npm i egg-mongo-native --save
|
```
|
|
## Enable Plugin
|
|
```js
|
// {app_root}/config/plugin.js
|
exports.mongo = {
|
enable: true,
|
package: 'egg-mongo-native',
|
};
|
```
|
|
## Configuration
|
|
### Single Instance
|
|
```js
|
// {app_root}/config/config.default.js
|
exports.mongo = {
|
client: {
|
host: 'host',
|
port: 'port',
|
name: 'test',
|
user: 'user',
|
password: 'password',
|
options: {},
|
},
|
};
|
```
|
|
### Replica Set (v2.1.0 or higher)
|
|
```js
|
// mongodb://host1:port1,host2:port2/name?replicaSet=test
|
exports.mongo = {
|
client: {
|
host: 'host1,host2',
|
port: 'port1,port2',
|
name: 'name',
|
options: {
|
replicaSet: 'test',
|
},
|
},
|
};
|
|
// mongodb://host:port1,host:port2/name?replicaSet=test
|
exports.mongo = {
|
client: {
|
host: 'host', // or ['host']
|
port: 'port1,port2', // or ['port1', 'port2']
|
name: 'name',
|
options: {
|
replicaSet: 'test',
|
},
|
},
|
};
|
```
|
|
### Multiple Instances
|
|
> **Can not set `client` and `clients` both.**
|
|
```js
|
// {app_root}/config/config.default.js
|
exports.mongo = {
|
clients: {
|
db1: {
|
host: 'host',
|
port: 'port',
|
name: 'db1',
|
user: 'user',
|
password: 'password',
|
options: {},
|
},
|
db2: {
|
host: 'host',
|
port: 'port',
|
name: 'db2',
|
user: 'user',
|
password: 'password',
|
options: {},
|
},
|
},
|
};
|
```
|
|
see [config/config.default.js](config/config.default.js) for more detail.
|
|
## Example
|
|
The APIs provided by plugin usually need two arguments. The first is commonly
|
the collection name, and the second is an object keeps the arguments of official
|
API. For example, to insert one document using official API
|
|
```js
|
db.collection('name').insertOne(doc, options);
|
```
|
|
and using plugin API
|
|
```js
|
const args = { doc, options };
|
app.mongo.insertOne('name', args);
|
```
|
|
**For Multiple Instances**
|
|
```js
|
const args = { doc, options };
|
app.mongo.get('db1').insertOne('name', args);
|
```
|
|
The `args` is an object provides the arguments to official API.
|
|
Please read [easy-mongodb](https://github.com/brickyang/easy-mongodb) for all APIs(tansaction is now supported) and more examples.
|
|
## License
|
|
[MIT](LICENSE)
|