非 Egg.js 用户请使用 easy-mongodb。
本插件基于 node-mongodb-native,提供了 MongoDB 官方 driver 及 API。
插件对一些常用 API 进行了简单封装以简化使用,同时保留了所有原版属性。例如,使用原版 API 进行一次查找需要写
db.collection('name')
.find(query, options)
.skip(skip)
.limit(limit)
.project(project)
.sort(sort)
.toArray();
封装后
app.mongo.find('name', { query, skip, limit, project, sort, options });
此插件完全支持 Promise,并强烈推荐使用 async/await。
安装
$ npm i egg-mongo-native --save
开启插件
// config/plugin.js
exports.mongo = {
enable: true,
package: 'egg-mongo-native',
};
配置
单实例
// {app_root}/config/config.default.js
exports.mongo = {
client: {
host: 'host',
port: 'port',
name: 'test',
user: 'user',
password: 'password',
options: {},
},
};
副本集 (v2.1.0 以上 )
// 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',
},
},
};
多个数据库实例配置
不能
client
和clients
都 设置,否则会报错。// {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: {}, }, }, };
请到 config/config.default.js 查看详细配置项说明。
使用示例
本插件提供的 API 只是对原版 API 进行了必要的简化,所有属性名称与原版 API 一致。所有针对文档操作的 API,通常接受 2 个参数,第一个参数是 collection 名称,第二个参数是一个对象,属性名即为原版 API 的所有参数。例如,使用原版 API 进行一次插入
db.collection('name').insertOne(doc, options);
使用插件 API
const args = { doc, options };
app.mongo.insertOne('name', args);
连接多个数据库时
const args = { doc, options };
app.mongo.get('db1').insertOne('name', args);
可以看到 args
就是包含原版 API 参数的一个对象。
完整 API(现已支持 MongoDB 4.0 的事务)和更多示例请参考 easy-mongodb。