如何在Meteor应用之间共享MongoDB集合?

20
我想为我的项目拥有一个管理员应用程序和一个客户端应用程序。理想情况下,我希望能够拥有一个共享的MongoDB集合。我该如何实现这个目标?
我曾尝试在两个不同的应用程序中使用相同名称的集合,但发现Meteor会将数据分开存储。你有什么建议吗?谢谢。
3个回答

17
export MONGO_URL=mongodb://localhost:3002/meteor

运行Meteor应用程序,它将更改Meteor使用的默认数据库。因此,共享数据库或集合不会成为问题!出于管理原因,我将使用自己管理的个人MongoDB服务器,而不是使用Meteor的内部MongoDB。


2
请注意,现在是3001而不是3002 - 参见此主题中的第一个答案:https://dev59.com/22Yq5IYBdhLWcg3wkRe_ - Jeremy S.
响应式太慢了,无法及时响应~ - crapthings
注意:集合可能看起来是空的,您需要进行插入才能查看数据。 - Ruben

9

一个合理的问题,可能值得超过这个答案的讨论:

MongoDB连接是由Meteor应用程序进程处理的,这是Meteors的一部分哲学,旨在采用一种被描述为:一个数据源为其服务的应用程序属于它,但有许多客户端订阅它的方法。

考虑到这一点,在一个应用程序(即您的Meteor应用程序)中结合“管理”和“客户端”客户端可能是首选方式。

然而,从服务器管理的角度来看,连接是由Meteor以这种方式处理的,也就是说,总是存在默认的本地数据源,该数据源位于项目目录中(.meteor/local/db,尝试使用meteor mongo --url在meteor应用程序进程运行时获取mongo连接字符串)。但是,为了部署目的,仍然可以指定可选的数据源字符串,例如在这些部署说明中描述的内容。

因此,您需要选择一种有点令人毛骨悚然的“本地开发部署”方式,以使您的设置能够正常工作。或者您可以去黑客源代码,不,忘了吧。您可能希望您的应用程序和客户端能够利用例如实时UI更新(发布),这就是为什么Meteor应用程序现在与“应用程序数据源”相互绑定的原因。从另一个应用程序连接时,触发模型更改的事件不会在这些应用程序之间传输。当然,mongoDB实例本身并不知道这一点。
我相信核心团队不会出于考虑周到的原因将数据源连接暴露给配置部分,除非他们通过某种模块概念扩展其架构,为Meteor实例提供核心Model / Collections抽象的公共服务层 - 至少支持发布/订阅事件的意识。

2
感谢这篇有趣的阅读。我认为构建URL路由方案似乎偏离了Meteor简单等于高效的原则。让不同的应用程序访问共享数据库也可以实现很好的关注点分离(将管理员/登录逻辑与公共端点分开)。 - Sam
2
隐藏包含敏感数据的 HTML 对于客户端也很难(不可能?)想象一下,例如,我有一个“管理”页面,其中包含我作为管理员查看的用户数量和所有用户数据。 我可以“隐藏”结果,但是我在模板中的 HTML 中所能做的最好的就是将我的敏感字段名称放在 #if 块内,以测试管理员访问权限。 但是,任何具有正确 js 技能的人都可以访问模板中的整个 html。 - Michael G.

4
尝试一下我刚刚为桥接两个应用程序(服务器A和B)而编写的DDP测试。
两个服务器都可以操作数据,但数据仅存储在服务器A中的一个集合中。
另请参阅此链接

这个解决方案在只有一些集合在两台服务器之间共享的情况下是最好的。目前选择的最佳答案只解决了共享所有集合的问题,而这并不总是人们所寻求的。 - a4xrbj1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接