如果在流星应用程序之外修改了集合,为什么meteor Tracker.autorun()会延迟检测mongodb更改

时间:2016-02-27 22:58:52

标签: meteor

一个非常简单的场景:在本地流星(v 1.2.1)开发环境(WebStorm)中,通过自动发布和不安全启用,我有一个MongodbDB(v 3.0.4)集合'Letters'。我希望立即回复此集合中添加,删除或修改的任何文档。

为此,我有以下自动运行功能:

Template.diagram.rendered = function(){

Tracker.autorun(function () {
        Letters.find({}).observe({
            added: function(document) {
                console.log('a new document has been added');
            },
            changed: function(newDocument) {
                console.log('a document has been changed');
            },
            removed: function(document) {
                console.log('a document has been removed');
            }
        });
    })
}

当从同一个应用程序中添加新文档时,我可以立即看到控制台消息(流星延迟补偿)。但是,当我使用外部工具(Robomongo)连接到同一个MongoDB数据库,并在“Letters”集合中添加,更改或删除文档时 - 在检测到此更改之前大约需要6-10秒,并且相应的控制台消息出现在浏览器中。 为什么需要这么长时间,而不是几乎是瞬间的?

1 个答案:

答案 0 :(得分:1)

一旦我在流星论坛上发布了这个问题,我就被指向了2014年的一个流星博客帖子,其中描述了oplog尾部功能,以及它在dev实例中默认启用的事实。这让我意识到,通过在我的开发应用程序中使用MONGO_URL env变量,我强迫我的meteor应用程序使用MongoDB实例,它一直在我的mac上运行,独立于我的流星开发,并且因此,被认为是"生产"通过我的流星应用程序。一旦我将应用程序切换到使用ad-hock mongo connection / db,oplog尾部就会生效,我开始看到即时事件传播到浏览器。 谢谢,来自流星论坛的@dburles!