当前位置: 首页 > 知识库问答 >
问题:

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

仉磊
2023-03-14

我正在做一个包含子项目的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个答案

    姬弘文
    2023-03-14

    根据精细手册,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' }
    }));
    

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

    柳经纶
    2023-03-14

    您可以做的一件事是,您可以为每个项目设置子文件夹。因此,在子文件夹中安装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访问多个数据库。

     类似资料:
    • 问题内容: 我正在做一个包含子项目的Node.js项目。一个子项目将拥有一个Mongodb数据库,Mongoose将用于包装和查询db。但是问题是 Mongoose不允许在一个Mongoose实例中使用多个数据库,因为模型建立在一个连接上。 要使用多个Mongoose实例,Node.js不允许使用多个模块实例,因为它在中具有缓存系统。我知道在Node.js中禁用模块缓存,但是我认为这不是一个好的解

    • 问题内容: 我正在做一个包含子项目的Node.js项目。一个子项目将拥有一个Mongodb数据库,Mongoose将用于包装和查询db。但是问题是 猫鼬不允许在一个猫鼬实例中使用多个数据库,因为模型建立在一个连接上。 要使用多个猫鼬实例,Node.js不允许使用多个模块实例,因为它在中具有缓存系统。我知道在Node.js中禁用模块缓存,但是我认为这不是一个好的解决方案,因为它只需要猫鼬。 我尝试使

    • 问题内容: 目前,我的Mongoose / NodeJS应用程序的/models/models.js文件中包含所有模型(架构定义)。 我想将它们分解成不同的文件,例如:user_account.js,profile.js等。但是,我似乎无法这样做,因为一旦我将这些类分开,我的控制器就会分解并报告“ 找不到模块 ”。 我的项目结构如下: 我的models.js文件的内容如下所示: 我的user.js

    • 之前我是在没有加密的情况下将数据存储在数据库中。但现在我需要加密现有数据和新插入的数据。 我所做的是:对于现有数据的加密,我使用了AES_ENCRYPT()方法, 更新SET=AES_ENCRYPT('poster','mykey'); 它运行良好,我能够使用AES_DECRYPT()方法解密数据。 在代码中,我做了如下更改: $CONFIG['Encryption_Key']='MyKey';/