2017-10-05 1 views
3

J'utilise Node.Js 8.6 avec Mongoose 4.11 et j'ai plusieurs connexions à la base de données. Les connexions Db sont établies via mongoose.createConnection. J'ai découvert que mongoose objet a connections propriété (tableau), où je peux voir les connexions établies. Ma question est, quelle est la bonne façon, de basculer entre les connexions lors de la création de modèles DB dans des modules distincts.Mongoose commutation de plusieurs connexions

index.js

async function db1() { 
    await mongoose.createConnection(
     process.env.MONGODB_URI_1, 
     { useMongoClient: true } 
    ); 
} 

async function db2() { 
    await mongoose.createConnection(
     process.env.MONGODB_URI_2, 
     { useMongoClient: true } 
    ); 
} 

model.js

//connect to db1 

const Test1 = mongoose.model('Test1', new mongoose.Schema({ name: String })); 

//connect to db2 

const Test2 = mongoose.model('Test2', new mongoose.Schema({ name: String })); 

Répondre

0

Vous pouvez utiliser le retour d'objets par createConnection afin de gérer vos connexions multiples.

const db1Link = await mongoose.createConnection(
    process.env.MONGODB_URI_1, 
    { useMongoClient: true } 
); 

// Connect to db1 
db1Link.model('Test1', new mongoose.Schema({ name: String })); 

const db2Link = await mongoose.createConnection(
    process.env.MONGODB_URI_2, 
    { useMongoClient: true } 
); 

// Connect to db2 
db2Link.model('Test2', new mongoose.Schema({ name: String })); 

Here is what the documentation says about it

connexions multiples

Nous avons donc bien vu comment se connecter à MongoDB en utilisant la connexion par défaut de mangouste. Parfois, nous avons besoin de plusieurs connexions ouvertes à Mongo, chacune avec différents paramètres de lecture/écriture, ou peut-être simplement à différentes bases de données par exemple. Dans ces cas, nous pouvons utiliser mongoose.createConnection() qui accepte tous les arguments déjà discuté et renvoie une nouvelle connexion pour vous.

var conn = mongoose.createConnection('mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]', options); 

Cet objet de connexion est ensuite utilisé pour créer et récupérer des modèles. Les modèles sont toujours limités à une seule connexion.

+0

C'est vrai. Quelle serait la manière élégante de partager ces objets de connexion autour des modules? –