提问者:小点点

single Node.js项目中的Mongoose和多数据库


我正在做一个包含子项目的Node.js项目。一个子项目将有一个Mongodb数据库,Mongoose将用于包装和查询DB。但问题是

>

  • mongoose不允许在单个mongoose实例中使用多个数据库,因为模型是在一个连接上构建的。
  • 要使用多个mongoose实例,Node.js不允许多个模块实例,因为它在require()中有缓存系统。我知道在node.js中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要Mongoose。

    我尝试在mongoose中使用createConnection()openset(),但这不是解决方案。

    我尝试深度复制mongoose实例(http://blog.imaginea.com/deep-copy-in-javascript/)以将新的mongoose实例传递到子项目,但它抛出RangeError:Maximum call stack size Exceped

    我想知道有没有办法使用多个数据库与猫鼬或任何解决这个问题的办法?因为我觉得猫鼬是相当容易和快速的。或任何其他模块作为推荐?


  • 共2个答案

    匿名用户

    您可以做的一件事是,您可以为每个项目设置子文件夹。因此,在子文件夹中安装mongoose,并从每个子应用程序中自己的文件夹中要求()mongoose。而不是从项目根或全局。因此一个子项目、一个mongoose安装和一个mongoose实例。

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

    在foo_db_connect.js中

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

    在bar_db_connect.js中

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

    在db_access.js文件中

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

    现在,您可以使用Mongoose访问多个数据库。

    匿名用户

    根据精细手册,createConnection()可用于连接到多个数据库。

    但是,您需要为每个连接/数据库创建单独的模型:

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

    我非常肯定您可以在它们之间共享模式,但您必须检查以确保。