Mangusto e database múltiplos no projeto single node.js

Eu estou fazendo um projeto Node.js que contém subprojetos. Um subprojeto terá um database do Mongodb e o Mongoose será usado para encapsular e consultar o db. Mas o problema é

Eu quero saber se há alguma maneira de usar vários database com mangusto ou qualquer solução alternativa para este problema? Porque eu acho que o mangusto é muito fácil e rápido. Ou quaisquer outros módulos como recomendações?

Uma coisa que você pode fazer é ter subpastas para cada projeto. Portanto, instale o mangusto nessas subpastas e exija o () mangusto de pastas próprias em cada subplataforma. Não da raiz do projeto ou do global. Então, um subprojeto, uma instalação de mangusto e uma instância de mangusto.

 -app_root/ --foo_app/ ---db_access.js ---foo_db_connect.js ---node_modules/ ----mongoose/ --bar_app/ ---db_access.js ---bar_db_connect.js ---node_modules/ ----mongoose/ 

Em foo_db_connect.js

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/foo_db'); module.exports = exports = mongoose; 

Em bar_db_connect.js

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/bar_db'); module.exports = exports = mongoose; 

Nos arquivos db_access.js

 var mongoose = require("./foo_db_connect.js"); // bar_db_connect.js for bar app 

Agora, você pode acessar vários bancos de dados com o mangusto.

De acordo com o bom manual , createConnection() pode ser usado para conectar-se a vários bancos de dados.

No entanto, você precisa criar modelos separados para cada conexão / database:

 var conn = mongoose.createConnection('mongodb://localhost/testA'); var conn2 = mongoose.createConnection('mongodb://localhost/testB'); // stored in 'testA' database var ModelA = conn.model('Model', new mongoose.Schema({ title : { type : String, default : 'model in testA database' } })); // stored in 'testB' database var ModelB = conn2.model('Model', new mongoose.Schema({ title : { type : String, default : 'model in testB database' } })); 

Tenho certeza que você pode compartilhar o esquema entre eles, mas você precisa verificar para ter certeza.

Como uma abordagem alternativa, o Mongoose exporta um construtor para uma nova instância na instância padrão. Então, algo assim é possível.

 var Mongoose = require('mongoose').Mongoose; var instance1 = new Mongoose(); instance1.connect('foo'); var instance2 = new Mongoose(); instance2.connect('bar'); 

Isso é muito útil ao trabalhar com fonts de dados separadas e também quando você deseja ter um contexto de database separado para cada usuário ou solicitação. Você precisará ter cuidado, pois é possível criar muitas conexões ao fazer isso. Certifique-se de chamar disconnect () quando as instâncias não forem necessárias e também de limitar o tamanho do pool criado por cada instância.

Muito tarde, mas isso pode ajudar alguém. As respostas atuais assumem que você está usando o mesmo arquivo para suas conexões e modelos.

Na vida real, há uma grande chance de você dividir seus modelos em arquivos diferentes. Você pode usar algo assim em seu arquivo principal:

 mongoose.connect('mongodb://localhost/default'); const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', () => { console.log('connected'); }); 

que é exatamente como é descrito nos documentos. E, em seguida, nos seus arquivos de modelo, faça algo como o seguinte:

 import mongoose, { Schema } from 'mongoose'; const userInfoSchema = new Schema({ createdAt: { type: Date, required: true, default: new Date(), }, // ...other fields }); const myDB = mongoose.connection.useDb('myDB'); const UserInfo = myDB.model('userInfo', userInfoSchema); export default UserInfo; 

Onde myDB é o nome do seu database.