Os exemplos abaixo utilizam o Yarn para instalação das dependências, mas se você preferir, pode usar o NPM sem problemas :)
- Instale o driver do mongo no seu projeto:
yarn add --exact mongodb
- Crie o diretório
app/Providers
se ele ainda não existir; - Dentro desse diretório, crie um diretório
AdonisMongoDb
; - Dentro do diretório
AdonisMongoDb
, crie um arquivo chamadoAdonisMongoProvider.js
com o seguinte conteúdo:
'use strict'
const { ServiceProvider } = require('@adonisjs/fold')
const AdonisMongoDb = require('./AdonisMongoDb')
const Helpers = use('Helpers')
class AdonisMongoProvider extends ServiceProvider {
register () {
this.app.singleton('MongoClient', () => {
const Config = this.app.use('Adonis/Src/Config')
return new AdonisMongoDb(Config)
})
}
async boot () {
const Env = this.app.use('Env')
if (!Helpers.isAceCommand()) {
const MongoClient = this.app.use('MongoClient')
await MongoClient.connect()
}
}
}
module.exports = AdonisMongoProvider
- Agora, dentro do mesmo diretório
AdonisMongoDb
, crie um outro arquivo chamadoAdonisMongoDb.js
com o seguinte conteúdo:
'use strict'
const { MongoClient } = require('mongodb')
class AdonisMongoDb {
constructor (config) {
const uri = '<protocol>://<username>:<password>@<host>/<dbname>'
.replace('<protocol>', config.get('database.mongo.protocol'))
.replace('<host>', config.get('database.mongo.host'))
.replace('<username>', config.get('database.mongo.user'))
.replace('<password>', config.get('database.mongo.password'))
.replace('<dbname>', config.get('database.mongo.database'))
const params = {
useNewUrlParser: true,
useUnifiedTopology: true,
}
this.client = new MongoClient(uri, params)
this.dbName = config.get('database.mongo.database')
}
async connect () {
if (this.db) {
return
}
await this.client.connect()
this.db = this.client.db(this.dbName)
}
close () {
return this.client.close()
}
collection (collectionName) {
return this.db.collection(collectionName)
}
}
module.exports = AdonisMongoDb
- No arquivo
config/database.js
, adicione a configuração para o MongoDB dentro do objeto exportado:
/*
|--------------------------------------------------------------------------
| Mongo
|--------------------------------------------------------------------------
|
| Here we define connection settings for MongoDB database.
|
| npm i --save mongodb
|
*/
mongo: {
protocol: Env.get('MONGO_PROTOCOL', 'mongodb+srv'),
host: Env.get('MONGO_HOST'),
user: Env.get('MONGO_USER'),
password: Env.get('MONGO_PASSWORD'),
database: Env.get('MONGO_DATABASE'),
},
-
Defina corretamente as variáveis de ambiente para conectar no seu banco MongoDB. Essa configuração funciona tanto para rodar o mongo localmente quando para usar Mongo Atlas.
-
E por fim, no arquivo
start/app.js
, adicione o provider do mongo na lista deproviders
:
const path = require('path')
const providers = [
// lista com seus providers
path.join(__dirname, '..', 'app', 'Providers', 'AdonisMongoDb', 'AdonisMongoProvider'),
]
E pronto! Para usar, só precisa importar o MongoClient
:
const MongoClient = use('MongoClient')
E então fazer qualquer ação selecionando uma collection:
MongoClient.collection('users').findOne(...) // após o uso da `collection`, pode usar qualquer método do driver do mongodb padrão.
O banco padrão selecionado é o que estiver na variável de ambiente MONGO_DATABASE
. Se quiser usar outro banco em algum ponto específico do seu app, pode usar:
MongoClient.client.db('outro-banco').collection('sua-collection') // aqui vc consegue selecionar a collection `sua-collection` do banco `outro-banco` configurado na mesma conexão do Mongo.
:)