Skip to content

mahudas-tw/mahudas-mongoose

Repository files navigation

@mahudas/mongoose

Mongoose plugin for Mahudas.

Dependencies

  • mahudas^0.0.3
  • mongoose^6.7.2

使用

Standalone

npm i
npm run mahudas

As a plugin

如同一般的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',
    }
  ]
}

model的寫法

接收conn與Schema兩個參數,回傳model。

module.exports = (conn, Schema) => {
  const schema = new Schema({
    email: { type: String, index: true },
  });

  const model = conn.model('users', schema);
  return model;
}

取用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({});