如何配置mongodb以与meteor一起使用(was:如何使meteor对直接mongod更改作出反应)

如何配置mongodb以与meteor一起使用(was:如何使meteor对直接mongod更改作出反应),mongodb,meteor,Mongodb,Meteor,下面是原始问题,以便第一个答案有意义。但事实证明,真正的问题是,如果您自己创建数据库,而不是让meteor创建数据库,那么您需要配置mongodb以便与meteor一起使用 原始问题: 我正在构建一个meteor应用程序,它显示一个项目列表。如果我使用HTML应用程序向已发布列表中添加或删除条目,它会在所有浏览器实例中立即响应。但是,如果我使用DirectMongoDBAPI对数据库进行更改,浏览器不会立即更新。(我的实际场景是从数据源发布这些条目,而不是从浏览器发布。) 问题是,在这个单独的应

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

原始问题:

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

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

只要您:
  • 正确发布数据
  • 已正确订阅数据
  • 您的模板引擎(Blaze,React)正在反应上下文中显示来自输出变量的数据
  • 一切都会好起来的。到处都是被动的-即使是从
    数据库更新
    。这是Meteor的默认行为。一切都应该正常


    更清楚的是:您不需要对访问MongoDB的其他应用程序执行任何操作

    你可以从命令行手工编辑MongoDB——只要你像我上面所说明的那样连接好所有东西——所有东西都会像有人使用你的Meteor应用程序一样工作。MongoDB是Meteor中的一个反应源,因此,Meteor将以反应方式提供这些数据,无论数据库如何更改。这是默认的行为


    向我们展示您的代码: 如果您在这里或作为Github的链接共享有问题的代码,我将编辑我的答案,指出您的代码没有这样做的原因


    更多阅读: 我强烈建议你花点时间阅读全文(我有)。这解释了Meteor的“反应性”是如何工作的,并且应该教会您所有需要知道的关于代码为什么不工作的知识。这本书其实很容易读,只是很长。如果在阅读之后,仍然不清楚-我很乐意与您进行skype对话,并逐行解释代码中发生的事情。在《流星》中,你要做的其实很简单

    您还可以去看看MongoDB的
    oplog
    是如何与Meteor进行通信的,以提供您所需要的灵敏反应。正如刚才所说。如果您的MongoDB没有
    oplog
    设置,那么meteor将返回轮询(这显然要慢一些)。(谢谢stubilo)

    只要您:
  • 正确发布数据
  • 已正确订阅数据
  • 您的模板引擎(Blaze,React)正在反应上下文中显示来自输出变量的数据
  • 一切都会好起来的。到处都是被动的-即使是从
    数据库更新
    。这是Meteor的默认行为。一切都应该正常


    更清楚的是:您不需要对访问MongoDB的其他应用程序执行任何操作

    你可以从命令行手工编辑MongoDB——只要你像我上面所说明的那样连接好所有东西——所有东西都会像有人使用你的Meteor应用程序一样工作。MongoDB是Meteor中的一个反应源,因此,Meteor将以反应方式提供这些数据,无论数据库如何更改。这是默认的行为


    向我们展示您的代码: 如果您在这里或作为Github的链接共享有问题的代码,我将编辑我的答案,指出您的代码没有这样做的原因


    更多阅读: 我强烈建议你花点时间阅读全文(我有)。这解释了Meteor的“反应性”是如何工作的,并且应该教会您所有需要知道的关于代码为什么不工作的知识。这本书其实很容易读,只是很长。如果在阅读之后,仍然不清楚-我很乐意与您进行skype对话,并逐行解释代码中发生的事情。在《流星》中,你要做的其实很简单


    您还可以去看看MongoDB的
    oplog
    是如何与Meteor进行通信的,以提供您所需要的灵敏反应。正如刚才所说。如果您的MongoDB没有
    oplog
    设置,那么meteor将返回轮询(这显然要慢一些)。(谢谢斯塔比洛)

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

    有关打开oplog的详细说明,请访问或

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

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

    replication:
      replSetName: rs0
      oplogSizeMB: 100
    
    然后使用mongo连接到数据库并键入

    use local
    rs.initiate()
    
    然后在启动meteor应用程序之前,将MONGO_URL设置为指向远程数据库,并将MONGO_OPLOG_URL设置为指向远程数据库上的本地数据库。例如:

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

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

    有关打开oplog的详细说明,请访问或

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

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