2016-02-27 17 views
1

一個非常簡單的場景:在本地流星(v 1.2.1)開發環境(WebStorm)中,自動發佈,並啓用不安全,我有一個MongodbDB(v 3.0.4)集合「信件」。我希望立即迴應本集合中添加,刪除或修改的任何文檔。爲什麼流星Tracker.autorun()會在延遲的情況下檢測到mongodb的變化,如果集合在流星應用程序之外被修改

爲此,我有以下運行功能:

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數據庫並添加,更改或刪除「信件」集合中的文檔時 - 在檢測到此更改之前大約需要6-10秒,並且相應的控制檯消息出現在瀏覽器中。 爲什麼需要這麼長時間,而不是幾乎是瞬間的?

回答

1

一旦我在流星論壇上發佈這個問題,我被指向2014年的流星博客文章,其中描述了oplog拖尾功能,以及事實上它只在默認情況下在dev實例中。這讓我意識到,通過在我的開發應用程序中使用MONGO_URL env變量,我迫使我的流星應用程序與MongoDB實例一起工作,這個實例始終在我的Mac上運行,與流星開發無關,因此, ,被我的流星應用程序視爲「製作」。一旦我切換應用程序以使用ad-hock mongo connection/db,oplog拖尾生效,我開始立即看到事件傳播到瀏覽器。 謝謝,來自流星論壇的@dburles!