如何将mongodb配置为与meter一起使用(即:如何使meter对mongod的直接更改作出反应)



下面的原始问题,所以第一个答案是有意义的。但事实证明,真正的问题是,如果你自己创建数据库,而不是让流星来做,你需要配置mongodb来与流星一起使用

原始问题:

我正在构建一个流星应用程序,它可以显示项目列表。如果我使用HTML应用程序向发布的列表添加或删除条目,它会在所有浏览器实例中立即做出反应。然而,如果我使用直接的MongoDB API对数据库进行更改,浏览器不会立即更新。(我的实际场景是从数据源发布这些条目,而不是从浏览器发布。)

问题是我需要在这个单独的应用程序中做什么,它将数据插入mongo,以便流星应用程序立即看到变化。

只要您是:

  1. 正确发布数据
  2. 是否正确订阅了数据
  3. 您的模板引擎(Blaze、React)正在反应上下文中显示输出变量的数据

一切都应该很好。在任何地方都是反应性的——甚至是从database update开始。这是Meteor的默认行为。一切都应该正常工作


需要特别说明的是:您不需要对访问MongoDB的其他应用程序执行任何操作

你可以从命令行手动编辑MongoDB——只要你像我上面所示的那样连接好了所有东西——一切都会像有人使用你的Meteor应用程序输入数据一样工作。MongoDB是Meteor中的一个反应源,由于Meteor的Tracker,无论数据库如何变化,Meteor都会反应性地提供这些数据。这是默认行为。


向我们展示您的代码:

如果你在这里或作为Github的链接分享有问题的代码,我会编辑我的答案,指出为什么你的代码没有这样做。


更多阅读:

我强烈建议您花点时间阅读整个跟踪器手册(我有)。这解释了Meteor的"反应性"是如何工作的,应该教会你所有你需要知道的关于为什么你的代码不工作的东西。事实上,这是一本很容易阅读的书,只是一本很长的书。如果在阅读后,仍然不清楚-我很乐意与您进行skype对话,并逐行解释您的代码中发生了什么。在《流星》中,你想做的其实很容易。

您也可以阅读此处,了解MongoDB的oplog是如何与Meteor通信的,以提供您想要的清脆反应性。正如斯图比洛几分钟前在评论中所说。如果您的MongoDB没有oplog设置,那么流星会返回轮询(这显然会更慢)。(谢谢stubilo)

如果没有Jermey的回答和关于oplog的评论,我永远不会明白这一点。最后他说的都是真的。问题是我在没有打开oplog的情况下创建了一个单节点mongdb实例。然而,流星要求启用oplog,以使反应性正常工作。

有关打开oplog的详细说明,请访问https://loosexaml.wordpress.com/2012/09/03/how-to-get-a-mongodb-oplog-without-a-full-replica-set/或https://themeteorchef.com/tutorials/setting-up-mongodb-oplog-tailing.

但这里有一个Ubuntu的简短自包含版本:

首先编辑/etc/mongodb.conf并添加

replication:
replSetName: rs0
oplogSizeMB: 100

然后用mongo连接到数据库并键入

use local
rs.initiate()

然后,在启动流星应用程序之前,将MONGO_URL设置为指向远程DBS,并将MONGO_OPLOGURL设置为指向遥控器上的本地DBS。例如:

export MONGO_URL="mongodb://mongohost:27017/simple"
export MONGO_OPLOG_URL="mongodb://mongohost:27017/local"
meteor run

最新更新