下面的原始问题,所以第一个答案是有意义的。但事实证明,真正的问题是,如果你自己创建数据库,而不是让流星来做,你需要配置mongodb来与流星一起使用
原始问题:
我正在构建一个流星应用程序,它可以显示项目列表。如果我使用HTML应用程序向发布的列表添加或删除条目,它会在所有浏览器实例中立即做出反应。然而,如果我使用直接的MongoDB API对数据库进行更改,浏览器不会立即更新。(我的实际场景是从数据源发布这些条目,而不是从浏览器发布。)
问题是我需要在这个单独的应用程序中做什么,它将数据插入mongo,以便流星应用程序立即看到变化。
只要您是:
- 正确发布数据
- 是否正确订阅了数据
- 您的模板引擎(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