Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoose multiple connections

Currently I have this code for my connection mongoose.js:

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 that requires the connection is test.js:

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


How can I update mongoose.js to use multiple connections with mongoose.createConnection(...) function?

I start with changes only for one connection when I do changes like that:

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

I get "undefined is not a function". If I use this code:

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

I get "Error: Trying to open unclosed connection"

Any advice?

like image 644
Pumych Avatar asked Oct 02 '15 11:10

Pumych


2 Answers

Mongoose handling connections via connections pool http://mongoosejs.com/docs/connections.html

You can use server: {poolSize: 5} option for increase/decrease pool (number of parallel connections)

If you need connections to different databases look here Mongoose and multiple database in single node.js project

Example of multiple connections:

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"); }); 
like image 113
vmkcom Avatar answered Sep 23 '22 16:09

vmkcom


OK. With your example I found a solution that fit my needs.

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); 

The only thing, is it OK to add connection objects to mongoose object or may be there is more elegant solution.

like image 24
Pumych Avatar answered Sep 24 '22 16:09

Pumych