2016-02-08 160 views
0

我是firebase的新手,實際上我正在嘗試加載一些基於時間戳的數據,並使用startat和endat在兩個時間戳之間進行檢索。數據是通過Python推送的。Firebase時間戳過濾器

的數據是如圖所示的樣本屏幕截圖

sample data

popping-fire-7751.firebaseio.com/device488

activevolt: 396 
avgPowerFactor: 0.95 
avgThdi: 7.5 
cubetemp: 37 
datetime: "2016-02-08 15:16:32" 
timestamp: 1454924792 
totalPowerGen: 34 

我通過蟒推送數據的數據路徑將優先級設置爲時間戳。 當我嘗試按照此處所示進行過濾時,它將返回空值。但沒有startAt和endAt它顯示所有的值。

http://jsfiddle.net/casperkamal/EZUtP/64/

var startTime = 1454924792; 
var endTime = 1454924798; 

new Firebase("https://popping-fire-7751.firebaseio.com/") 
    .startAt(startTime) 
    .endAt(endTime) 
    .once('value', show); 

任何人可以幫助我什麼,我做錯了什麼?

+0

請勿將您的工作放在過時的樣品上。現在,您可以使用'orderByChild('timestamp')。startAt(startTime).endAt(endTime)'過濾任何孩子。沒有必要再使用優先權。 –

+0

謝謝@FrankvanPuffelen你的答案有幫助,並且它工作得很好。 – Casperkamal

+0

太棒了!如果它回答了您的問題,請通過單擊左側的複選標記來接受它。這樣別人可以很容易地看到你已經得到了幫助。 –

回答

1

你試圖跳過你的JSON樹中的級別:

var startTime = 1454924792; 
var endTime = 1454924798; 

new Firebase("https://popping-fire-7751.firebaseio.com/") 
    .child('device488') 
    .startAt(startTime) 
    .endAt(endTime) 
    .once('value', show); 

我強烈建議您不要依賴於隱含的優先級和了,而不是僅僅使用過濾orderByChild()

new Firebase("https://popping-fire-7751.firebaseio.com/") 
    .child('device488') 
    .orderByChild('timestamp') 
    .startAt(startTime) 
    .endAt(endTime) 
    .once('value', show); 

您需要爲您的安全規則添加索引:

{ 
    "rules": { 
    "device488": { 
     ".indexOn": ["timestamp"] 
    } 
    } 
} 

Bu更明確的行爲非常值得加入這項工作。