Mongoose plugin for Mahudas.
- mahudas^0.0.3
- mongoose^6.7.2
npm i
npm run mahudas
如同一般的plugin,透過npm安裝之後,在Application的plugin.env.js裡設定啟用。
npm i @mahudas/mongoose -s
// config/plugin.deafult.js
module.exports = {
mongoose: {
enable: true,
package: '@mahudas/mongoose',
},
}
// config/config.default.js
module.exports = {
mongoose: {
uri: 'mongodb-connection-string',
options: {
maxPoolSize: 10,
minPoolSize: 1,
autoIndex: true,
autoCreate: true,
socketTimeoutMS: 30000,
},
modelDir: 'app/model',
}
}
參數 | 說明 |
---|---|
uri | 連線MongoDB的字串 |
options | (非必須) mongoose的參數,可直接參考mongoose文件 |
modelDir | model放置的目錄,系統會去掃描這個目錄之下的所有檔案與子目錄,若是檔案或目錄開頭是dash(-),則會被忽略不掃描 |
@mahudas/mongoose 也可以允許多個MongoDB的連線,只要把config裡的mongoose改成陣列就可以: (需注意兩個資料庫的modelDir通常會是不同路徑)
// config/config.default.js
module.exports = {
mongoose: [
{
uri: 'first one',
modelDir: 'app/model/first',
},
{
uri: 'second one',
modelDir: 'app/model/second',
}
]
}
接收conn與Schema兩個參數,回傳model。
module.exports = (conn, Schema) => {
const schema = new Schema({
email: { type: String, index: true },
});
const model = conn.model('users', schema);
return model;
}
@mahudas/mongoose 針對 application 與 context 進行了擴充,可以透過app.mongoose 或 ctx.mongoose 進行操作。
model被載入後,會被儲存在mongoose.models裡,命名則是與model的命名一致,例如有個model是:
const model = conn.model('users', schema);
則可以用以下方式取得model:
const Users = app.mongoose.models.users;
await Users.findOne({});
如果有多個資料庫連線,基本上每個connection都會被儲存在mongoose.connections裡,這是一個陣列。
因此,如果要存取第二個資料庫的model:
const Users = app.mongoose.connections[1].models.users;
await Users.findOne({});