2015-10-02 9 views
7

Attualmente ho questo codice per la mia connessione mongoose.js:Mongoose connessioni multiple

var mongoose = require('mongoose'); 
var uriUtil = require('mongodb-uri'); 
var mongodbUri = 'mongodb://localhost/db_name'; 
var mongooseUri = uriUtil.formatMongoose(mongodbUri); 
mongoose.connect(mongooseUri); 
module.exports = mongoose; 

file che richiede la connessione è test.js:

var mongoose = require('../model/mongoose'); 
var schema = mongoose.Schema({...}); 


Come posso aggiornare mongoose.js per utilizzare più co nnioni con la funzione mongoose.createConnection (...)?

Comincio con modifiche solo per un collegamento quando faccio i cambiamenti del genere:

var mongoose = require('mongoose'); 
mongoose.createConnection('mongodb://localhost/db_name'); 
mongoose.open('localhost'); 
module.exports = mongoose; 

ottengo "indefinito non è una funzione". Se io uso questo codice:

var mongoose = require('mongoose'); 
db = mongoose.createConnection('mongodb://localhost/db_name'); 
db.open('localhost'); 
module.exports = mongoose; 

ottengo "Errore: tentativo di aprire la connessione non chiusa"

Qualche consiglio?

risposta

10

connessioni di movimentazione Mongoose tramite connessioni piscina http://mongoosejs.com/docs/connections.html

È possibile utilizzare server: {poolSize: 5} opzione per piscina aumento/diminuzione (numero di connessioni parallele)

Se avete bisogno di collegamenti a diversi database guarda qui Mongoose and multiple database in single node.js project

Esempio di connessioni multiple:

var mongoose = require('mongoose') 
var conn = mongoose.createConnection('mongodb://localhost/db1'); 
var conn2 = mongoose.createConnection('mongodb://localhost/db2'); 
var Schema = new mongoose.Schema({}) 
var model1 = conn.model('User', Schema); 
var model2 = conn2.model('Item', Schema); 
model1.find({}, function() { 
    console.log("this will print out last"); 
}); 
model2.find({}, function() { 
    console.log("this will print out first"); 
}); 
+0

Sì, ho bisogno di connessione DB multipla. Ho visto questa risposta, ma nel mio caso non funziona ancora. Esempio con conn e conn2 sembra il migliore, ma non posso semplicemente separarlo in due file. Per favore, prova a dare un esempio con? – Pumych

+0

ha aggiunto un esempio funzionante per te. È quello che ti serviva? – vmkcom

4

OK. Con il tuo esempio ho trovato una soluzione che si adatta alle mie esigenze.

mongoose.js

var mongoose = require('mongoose'); 
mongoose.main_conn = mongoose.createConnection('mongodb://localhost/main'); 
mongoose.admin_conn = mongoose.createConnection('mongodb://localhost/admin'); 
module.exports = mongoose; 

content.js

var mongoose = require('../model/mongoose'); 
var schema = mongoose.Schema({...}); 

/// functions here 
schema.statics.func_a(){...}; 
schema.statics.func_b(){...}; 

// And finaly updated only one line 
//exports.Content = mongoose.model('Content', schema); 
exports.Content = mongoose.main_conn.model('Content', schema); 

L'unica cosa, è OK per aggiungere gli oggetti di connessione alla mangusta oggetto o potrebbe essere non v'è soluzione più elegante .

0

config.js

module.exports = { 
    default: 'main', 
    main: 'mongodb://localhost/main', 
    admin: 'mongodb://localhost/admin', 
}; 

connection.js

const mongoose = require('mongoose'); 
const config = require('./config'); 

mongoose.Promise = global.Promise; 

function createConnection(name) { 
    return mongoose.createConnection(config[name]); 
} 

module.exports = createConnection(config[config.default]); 

module.exports.on = createConnection; 

model.js (classe personalizzata)

const connection = require('./connection'); 

class Model { 
    constructor(name, data) { 
     this.data = data; 
     return this.connection().model(name, data.schema); 
    } 

    connection() { 
     if (this.data.connection) { 
      return connection.on(this.data.connection); 
     } 

     return connection; 
    } 
} 

module.exports = Model; 

utente.js

const Schema = require('mongoose').Schema; 
const conn = require('./connection'); 
const Model = require('./model'); 

const userSchema = new Schema({ 
    name: String, 
    email: String, 
    password: String 
}); 

// USING MONGOOSE MODEL 
// default connection 
const UserM1 = conn.model('User', userSchema); 

// admin connection 
const UserM2 = conn.on('admin').model('User', userSchema); 

// USING CUSTOM MODEL 
// default connection 
const UserC1 = new Model('User', { 
    schema: userSchema 
}); 

// admin connection 
const UserC2 = new Model('User', { 
    schema: userSchema, 
    connection: 'admin' 
}); 
0

si può fare in questo modo

var mongoose = require('mongoose'); 
var mongoose2 = new mongoose.Mongoose(); 

Ora è possibile aggiungere il modello a ogni dell'istanza mangusta.

mongoose.model('some', mongooseSchema1); 
mongoose.model('some2', mongooseSchema2); 

sguardo al doc here