2016-02-08 40 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更明确的行为非常值得加入这项工作。