如何配置mongodb用于流星(是:如何使流星对直接mongod变化做出反应)

时间:2017-02-01 17:15:14

标签: mongodb meteor

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

原始问题:

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

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

2 个答案:

答案 0 :(得分:4)

只要你是:

  1. 正确发布数据
  2. 已正确订阅数据
  3. 您的模板引擎(Blaze,React)在反应式上下文中显示输出变量中的数据
  4. 一切都应该没问题。无处不在 - 甚至来自database update。这是Meteor的默认行为。一切都应该正常工作

    要格外明确:您不需要任何来访问访问MongoDB的其他应用

    你可以从命令行手动编辑MongoDB - 只要你像上面所说的那样把所有东西都搞定了 - 一切都会好像有人把你的数据放到Meteor中一样应用。 MongoDB是Meteor中的一个反应源,由于Meteor's Tracker,无论数据库如何变化,Meteor都会反应性地提供这些数据。这是默认行为。

    告诉我们您的代码:

    如果您在此处或作为Github的链接共享相关代码,我将编辑我的答案,指出您的代码没有这样做的原因。

    更多阅读:

    高度 建议你花一点时间阅读整个 tracker manual(我有)。这解释了Meteor" Reactivity"工作,应该教你所有你需要知道的代码为什么你的代码不工作。它实际上非常容易阅读,只是一个很长的阅读。如果在阅读之后, 仍然 不清楚 - 我会开心与您进行Skype对话并解释您的情况代码逐行。你在Meteor中尝试做的事情实际上非常简单。

    您还可以read here查看MongoDB oplog如何与Meteor通信,以提供您正在寻找的清脆反应。正如stubilo前面a comment所说的那样。如果您的MongoDB没有设置oplog,那么流星会回归到轮询(显然会慢一些)。 (感谢stubilo)

答案 1 :(得分:1)

如果没有Jermey的回答和关于oplog的评论,我绝不会想到这一点。最后他说的一切都是真的。问题是我创建了一个单节点mongdb实例而没有打开oplog。但是,meteor要求启用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_OPLOG_URL设置为指向远程上的本地DBS。例如:

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