2016-02-05 79 views
1

動態計算值,我有一個簡單火力數據庫:/rides是這樣保持火力

{ 
    car: "Toyota" 
    minutes: 15 
} 

簡單對象的列表,我需要顯示所有的遊樂項目分鐘的總和。顯而易見的解決方案是加載所有遊樂設施並計算總和。但是,如果我有幾百個遊樂設施,這是非常緩慢的,長達幾秒鐘。

所以看來我必須在數據庫中爲此保留一個單獨的字段/totalMinutes。但是,因此每次添加/移除/換乘時都必須手動更新/totalMinutes。無論如何,這不是一個大問題。

但是如果我只需要計算一部分遊樂設施的總分鐘數呢?例如只有「豐田」汽車或「福特」汽車?手動維護/totalMinutesFord,/totalMinutesToyota現在看起來並不那麼容易。

那麼在firebase中維護這種動態值的正確方法是什麼?

回答

3

Firebase無法根據數據庫中的數據自動計算值。

所以,你有兩個選項:

  1. 計算值,只要你更新數據
  2. 檢索所有的數據和客戶端

你已經(明智地)決定計算值檢索所有數據不是一個好主意。您的用戶將會對此感恩。

因此,無論何時更新乘車數據,都會計算派生值。我不知道爲什麼要爲多個值做這件事比爲單個值做更難。它可能是更多的代碼,但它幾乎相同的代碼:

var ride = { car: "Toyota", minutes: 15 }; 
ref = new Firebase('https://yours.firebaseio.com/'); 
ref.child('rides').push(ride); 
ref.child('totalMinutes').transaction(function(current_value) { 
    return (current_value || 0) + ride.minutes; 
}); 
ref.child('totalMinutes'+ride.car).transaction(function(current_value) { 
    return (current_value || 0) + ride.minutes; 
}) 
+0

Thanks!但是,如果我需要根據用戶輸入計算遊樂設施子集的總分數,該怎麼辦?例如只用於遊樂設施,哪些分鐘值大於用戶輸入的內容?我無法爲所有可能的用戶輸入保留預先計算的值 – netimen

+1

這隻會讓您下載相關數據並進行計算。但是對於進行聚合和數據庫的設備來說,這一直是一個壓力。 –