我正在尝试将多个MongoDB数据库连接到单个Node.js项目中。这是我当前的结构和手头的问题。

节点版本:v6.12.1

Express.js版本:4.16.2

猫鼬版本:4.13.6

当前结构:

primaryDB.js



var mongoose = require('mongoose');
var configDB = require('./database.js');


//Connect to MongoDB via Mongoose
mongoose.Promise = require('bluebird');

//mongoose.Promise = global.Promise;
mongoose.connect(configDB.url, { useMongoClient: true });


//Check for successful DB connection
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Primary DB Successfully Connected..");
});

module.exports = mongoose;





secondaryDB.js



var mongoose = require('mongoose');

mongoose.connect('mongodb://mongodb_address_goes_here:27017/db_name', { useMongoClient: true });

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Secondary DB Successfully Connected..");
});


module.exports = mongoose;





然后,每个数据库连接分别导入到其架构文件中,架构文件从中导出模块。

即将发行

当我运行我的应用程序时,它可以正常启动并成功连接到两个数据库,但是我认为猫鼬要么被覆盖,要么因为我可以对主要对象执行findOne()命令,但是辅助对象失败,反之亦然。

例:



var async = require('async');
var primaryModel = require('../../../models/general/primary');
var SecondaryModel = require('../../../models/general/secondary');


function getInfo() {

  async.waterfall([
    getPrimaryName,
    getSecondaryName
  ], function (err, info) {
  });
};

function getPrimaryName(callback){
  Primary.findOne({}, function (err, primaryInfo){
    if (err) {
      console.log("Error" + err);
    }
      console.log('Primary info is : ' + primaryInfo);
     callback(null,primaryInfo);
  });
}



function getSecondaryName(primaryInfo, callback) {

  console.log(primaryInfo); //Make sure its being passed

  Secondary.findOne({}, function (err, secondaryInfo) {
    if (err) {
      console.log("Error" + err);
    }
    console.log('Secondary Info is  : ' + secondaryInfo);
    callback(null, secondaryInfo);
  });
}





上面的问题是我可能会从调用返回到主服务器,而不是从辅助服务器返回数据。我再次相信这是因为某些东西被覆盖了。

任何帮助表示赞赏。抱歉,冗长。

最佳答案

使用mongoose.createConnection创建您的连接

所以

const conn1 = mongoose.createConnection('first server options')
const conn2 = mongoose.createConnection('second server options')


在这里阅读更多
http://mongoosejs.com/docs/connections.html#multiple_connections

关于javascript - 在Node.js项目中连接多个Mongo数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48101323/

10-09 15:20
查看更多