2014-02-11 53 views
1

我正在使用d3繪製一個帶有x和y座標的流星集(Hostiles)到圖像上。我可以成功地做到這一點。但是,我有一個發佈功能,可以檢查用戶登錄名是admin還是普通用戶。如果用戶是管理員,它使用d3繪製所有點,但是當它是任何其他用戶時,它只繪製特定於用戶位置的點。流星發佈/訂閱延遲時間

//Base Publish on User Type 
if (user === true) { 
    //Admin Return all Points 
    return Hostiles.find(); 
} else { 
    //Any other user returns location specific points 
    return Hostiles.find({latitude: {$lte: xLoc + 80, $gte: xLoc - 80}, longitude: {$lte: yLoc + 80, $gte: yLoc - 80}}); 
}; 

所有這些工作正常。當我更改Hostile位置的xLocyLoc時,會發生此問題。當管理員登錄時,隨着集合中的更改,重繪將立即生效。但是,當普通用戶登錄時,重繪時間會有所延遲。這個d3重畫通常需要3-10秒。在客戶端,我有我的訂閱和d3繪製在Meteor.autorun(function() {。也許有沒有辦法解決這個問題?謝謝。

+1

我假設從'Session'中檢索到'xLoc'和'yLoc'?因爲如果它們不是,那麼只有當其他被動數據源發生變化時(或者如果光標中的數據發生變化,這可能是你所看到的那樣,每10秒鐘一次),'autorun'纔會被執行。 –

+3

在Meteor博客上閱讀本文:https://www.meteor.com/blog/2013/12/17/meteor-070-scalable-database-queries-using-mongodb-oplog-instead-of-poll-and -diff - MongoDB oplog的當前實現僅支持對標量字段進行等式檢查。所有其他操作(如您的lte/gte檢查)仍然使用舊的10秒輪詢/比較方法。這將在1.0之前改變,因爲Meteor團隊在oplog實施中增加了更多的操作員。 – sbking

+0

@musically_ut他們收到使用會話。 – Nate

回答

1

「目前MongoDB的oplog的實現只支持對標量字段的平等檢查,所有其他操作(比如你的lte/gte檢查)仍然使用舊的10秒poll/diff方法,這會在1.0之前更改,因爲Meteor團隊增加了更多的操作員到oplog實現中。「 - @ Cuberto https://www.meteor.com/blog/2013/12/17/meteor-070-scalable-database-queries-using-mongodb-oplog-instead-of-poll-and-diff

但是,有一個解決方法是在未發佈的devel分支上。見https://github.com/meteor/meteor/wiki/Oplog-Observe-Driver。它允許使用Minimongo支持的任何不包含$ where或$ near的選擇器。只需使用meteor --release oplog-with-operators即可。 感謝@Cuberto和@alanning的出色解決方案。