2016-06-09 2 views
1

Я пытаюсь запросить мои данные, чтобы получить список элементов, отсортированных по алфавиту и отфильтрованных по элементам, помеченным как «видимый».Firebase запрос используя. equalTo (логическое значение, строковый ключ) не работает

Вот моя структура данных.

listItems 
    list_1_uid 
     item_1_uid 
      name: "Item 01" 
      nameLowercase: "item 01" 
      visible: true 
     item_2_uid 
      name: "zItem 02" 
      nameLowercase: "zitem 02" 
      visible: false 
     item_3_uid 
      name: "aItem 03" 
      nameLowercase: "aitem 03" 
      visible: true 

Вот мой вопрос.

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("nameLowercase") 
    .equalTo(true, "visible"); 

Мой запрос не возвращает данных. Если я удалю оператор .equalTo (true, «visible»), запрос возвращает весь список в алфавитном порядке.

Любые предложения о том, как получить список фильтров?

ответ

2

Запросы в Firebase привязаны к свойству, указанному в вызове orderBy. Поэтому вызов equalTo(boolean value, String key) в этом примере относится к nameLowercase, поэтому он будет запрашивать все элементы с nameLowercase, установленными на true. Второй параметр относится к ключу элемента (например, item_1_uid) и может использоваться для указания начальной точки в запросе. Это полезно для разбивки на страницы, например.

Поскольку не существует никаких ограничений по этому запросу, решение было бы использовать запрос, заказы на «видимый», а затем делать какие-либо дополнительные сортировки на nameLowercase стороне клиента с конечным результатом:

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("visible") 
    .equalTo(true); 
Смежные вопросы