Mangusta e database multipli nel progetto single node.js

Sto facendo un progetto Node.js che contiene progetti secondari. Un sottoprogetto avrà un database Mongodb e Mangusta verrà utilizzata per il wrapping e l’interrogazione di db. Ma il problema è

Voglio sapere se è comunque ansible utilizzare più database con mangusta o soluzioni alternative per questo problema? Perché penso che la mangusta sia abbastanza facile e veloce. O altri moduli come raccomandazioni?

Una cosa che puoi fare è che potresti avere sottocartelle per ogni progetto. Quindi, installa mangusta in quelle sottocartelle e richiede () mangusta dalle proprie cartelle in ogni sottoapplicazione. Non dalla radice del progetto o dal globale. Quindi un progetto secondario, un’installazione di mangusta e un’istanza di mangusta.

 -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/ 

In foo_db_connect.js

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

In bar_db_connect.js

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

Nei file db_access.js

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

Ora puoi accedere a più database con mangusta.

Secondo il manuale fine , createConnection() può essere utilizzato per connettersi a più database.

Tuttavia, è necessario creare modelli separati per ogni connessione / 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' } })); 

Sono abbastanza sicuro che è ansible condividere lo schema tra di loro, ma è necessario verificare per assicurarsi.

Come approccio alternativo, Mongoose esporta un costruttore per una nuova istanza sull’istanza predefinita. Quindi qualcosa del genere è ansible.

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

Questo è molto utile quando si lavora con origini dati separate e anche quando si desidera avere un contesto di database separato per ogni utente o richiesta. Dovrai stare attento, dato che è ansible creare MOLTE connessioni quando si fa questo. Assicurati di chiamare disconnect () quando le istanze non sono necessarie e anche di limitare la dimensione del pool creata da ogni istanza.

Piuttosto tardi, ma questo potrebbe aiutare qualcuno. Le risposte correnti presuppongono che si stia utilizzando lo stesso file per le connessioni e i modelli.

Nella vita reale, c’è un’alta probabilità che tu divida i tuoi modelli in file diversi. Puoi usare qualcosa di simile nel tuo file principale:

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

che è proprio come è descritto nei documenti. E poi nei file del tuo modello, fai qualcosa di simile al seguente:

 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; 

Dove myDB è il nome del tuo database.