我正在做一个包含子项目的Node.js项目。一个子项目将有一个Mongodb数据库,Mongoose将用于 Package 和查询数据库。但问题是
- 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 exceeded
。
我想知道有没有办法使用多个数据库与mongoose或任何解决这个问题?因为我认为mongoose是相当容易和快速。或任何其他模块作为建议?
8条答案
按热度按时间brqmpdu11#
根据精细手册,
createConnection()
* 可以 * 用于连接到多个数据库。但是,您需要为每个连接/数据库创建单独的模型:
字符串
我非常确定您可以在它们之间共享模式,但您必须检查以确保。
wvyml7n52#
很晚了,但这可能会对某些人有所帮助。当前的答案假设您正在为您的连接和模型使用相同的文件。
在真实的生活中,你很有可能会将你的模型分割成不同的文件。你可以在主文件中使用这样的东西:
字符串
这就是文档中描述的方式。然后在模型文件中,执行以下操作:
型
其中myDB是数据库名称。
rsl1atfo3#
你可以做的一件事是,你可能为每个项目都安装了一个目录。所以,在那个目录中安装mongoose,并从每个子应用程序中的自己的文件夹中要求()mongoose。不是从项目根目录或全局目录。所以一个子项目,一个mongoose安装和一个mongoose示例。
字符串
在foo_db_connect.js中
型
在bar_db_connect.js中
型
在db_access. js文件中
型
现在,您可以使用mongoose访问多个数据库。
clj7thdc4#
作为一种替代方法,Mongoose确实在默认示例上导出了一个新示例的构造函数。
字符串
这在使用单独的数据源时非常有用,并且当您希望为每个用户或请求使用单独的数据库上下文时也非常有用。您需要小心,因为这样做可能会创建大量连接。确保在不需要示例时调用disconnect(),并且限制每个示例创建的池大小。
flvtvl505#
Mongoose和多个数据库在一个node.js项目中
使用useDb解决此问题
例如
字符串
6yoyoihd6#
字符串
fiei3ece7#
我一直在使用这种方法,它对我很有效,直到现在。
字符串
zxlwwiss8#
我不知道这是否会帮助任何人,但这是我在尝试使用Mongoose处理多个连接后最终做的事情,并最终在这里(从许多位置)。
const mongoose = require("mongoose");
(参考Mongoose v.8)返回的对象有一个“connections”属性,一个连接数组。这又包含一个id属性,数组的id,当连接建立时返回。所以我做了这样的事情:
字符串
存储id允许我使用
mongoose.connections[id]
调用多个连接中的一个,这也意味着我可以将Mongoose对象保留为可变的,并继续我的生活而不用担心。