2016-02-08 1 views
0

Я новичок в firebase, на самом деле я пытаюсь загрузить некоторые данные на основе метки времени и извлекать между двумя временными метками с помощью startat и endat. Данные передаются через Python.Фильтр timestamp 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 

Я толкая данные через питона устанавливая приоритет как временную метку. Когда я пытаюсь фильтровать, как показано здесь, он возвращает null. Но без 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"] 
    } 
    } 
} 

Бу t более явное поведение стоит того, чтобы добавить это.