2015-01-12 5 views
13

Моего firebase данные выглядят следующим образом:Firebase запрос по диапазону дат

{ 
    "lambeosaurus": { 
    "date" : 1420753443, 
    "length" : 12.5, 
    "weight": 5000 
    }, 
    "stegosaurus": { 
    "date" : 1429053443, 
    "length" : 9, 
    "weight" : 2500 
    } 
} 

Я ищу способ фильтрации даты, используя диапазон дат. Я видел несколько примеров в Интернете, где они запросили дату, но временная метка всегда была ключом, который невозможен в моем случае.

Соответствующий раздел документации можно найти здесь: https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

Важно, что обновление в режиме реального времени все еще поддерживается. Я также хочу только определить количество всех элементов, которые соответствуют критерию. Меня не интересует точка данных для каждого узла.

ответ

28

Похоже, вы можете использовать метод orderBychild() на заказ по ключу дочернего или свойства (т.е. weight, length или date). А если цепь, используя startAt() & endAt(), можно построить запрос, который вы ищете:

var startDate = 14200000000; 
var endDate = 14300000000; 

ref.orderByChild("date").startAt(startDate).endAt(endDate) 
    .on("child_added", function(snapshot){ 
    console.log("got the data!", snapshot); 
    }); 
+0

Есть ли способ определить количество раз, которые соответствуют критерию «& startAt» «EnDAT», но без необходимости загружать каждый отдельный элемент. Переходя от .on ('child_added') к .on ('value'), это может быть достигнуто, но тогда оно больше не синхронизирует реальное время. – Paul

+1

Можно ли это расширить до координат GPS? то есть. имеют 'startAt()' и 'endAt' по широте и долготе? – Sauron

+0

это сработало для всех? –

Смежные вопросы