Ronen Teva
Ronen Teva

Reputation: 1437

Mongoose models from two connections

I have the following setup:

/models/index.js

var glob = require('glob');
var mongoose = require('mongoose');
var Promise = require('bluebird');
mongoose.Promise = Promise;

mongoose.connect('mongodb://localhost/firstDB', {
  useMongoClient: true
});

var models = glob.sync(__dirname + '/*.js', {ignore: '**/index.js'});
models.forEach(function (model) {
  require(model);
});

/models/movie.js

var mongoose = require('mongoose');
var movieSchema = new mongoose.Schema({
  title: String
}, {timestamps: true});

mongoose.model('movie', movieSchema);

/app.js

require('./models');
...
var Movie = mongoose.model('movie');
...

I would like to access secondDB models from the same app.js file, how can I do that?


Update: The end setup should look something like that:
(not sure how to pass the connection to the model)

/models/index.js

var glob = require('glob');
var mongoose = require('mongoose');
var Promise = require('bluebird');
mongoose.Promise = Promise;

var firstConnection = mongoose.connect('mongodb://localhost/firstDB', {
  useMongoClient: true
});
var secondConnection = mongoose.connect('mongodb://localhost/secondDB', {
  useMongoClient: true
});

var firstModels = glob.sync(__dirname + '/*.js', {ignore: '**/index.js'});
firstModels.forEach(function (model) {
  require(model);
});
var secondModels = glob.sync(__dirname + '/second/*.js');
secondModels.forEach(function (model) {
  require(model);
});

/models/movie.js

var mongoose = require('mongoose');
var movieSchema = new mongoose.Schema({
  title: String
}, {timestamps: true});

mongoose.model('movie', movieSchema);

/models/second/car.js

var mongoose = require('mongoose');
var carSchema = new mongoose.Schema({
  color: String
}, {timestamps: true});

mongoose.model('car', carSchema);

/app.js

require('./models');
...
var Movie = mongoose.model('movie');
var Car = mongoose.model('car');
...

Upvotes: 1

Views: 1139

Answers (1)

Utkarsh Dubey
Utkarsh Dubey

Reputation: 776

Try this, Thanks!

var mongoose = require('mongoose')
var connection1 = mongoose.createConnection('connectionstring1');
var connection2 = mongoose.createConnection('connectionstring2');

Check this URL - http://mongoosejs.com/docs/connections.html

and Go to Multiple Connection Section.

Edit :

connectionOne.js

var mongoose = require('mongoose'),  
    mongoURI = 'mongodb://user:password@localhost:27017/dbOne';

module.exports = connectionOne = mongoose.createConnection(mongoURI);

connectionOne.on('connected', function() {  
  console.log('Mongoose connected to connectionOne');
});

require('./events') 

connectionTwo.js

var mongoose = require('mongoose'),  
    mongoURI = 'mongodb://user:password@localhost:27017/dbTwo';

module.exports = connectionTwo = mongoose.createConnection(mongoURI);

connectionTwo.on('connected', function() {  
  console.log('Mongoose connected to connectionTwo');
});

require('./events') 

events.js

var mongoose = require('mongoose'),  
    connectionOne = require('./connectionOne');

var Event = new mongoose.Schema({  
  name: { type: String, required: true },
  date: { type: Date, required: false }
});

var connectionTwo = require('./connectionTwo');

var newEvent = new mongoose.Schema({  
  name: { type: String, required: true },
  organizer: { type: String, required: true }
});

module.exports = {

    connectionOne.model('Event1', Event); 
    connectionTwo.model('Event2', newEvent);

} 

For more explanation - handling-multiple-databases-and-connections-with-mongoose

  • Note - I didn't test it.

Upvotes: 1

Related Questions