@AndreyRafalsky13

Как правильно использовать whereGreaterThan(), orderBy() и startAt() в запросе (Firebase)?

Подскажите пожалуйста, как правильно сформировать запрос. В коллекции лежат объекты-заметки с полями title, description, priority. Мне нужно получить только те, у которых:

  1. Приоритет больше 1
  2. Заголовок начинается на "A"


Оба условия должны соблюдаться. Написал вот такой запрос:

collectionReference
                .whereGreaterThan(KEY_PRIORITY, 1)
                .orderBy(KEY_TITLE)
                .orderBy(KEY_PRIORITY)
                .startAt("A")


Получил exception:

java.lang.IllegalArgumentException: Invalid query. You have an inequality where filter (whereLessThan(), whereGreaterThan(), etc.) on field 'priority' and so you must also have 'priority' as your first orderBy() field, but your first orderBy() is currently on field 'title' instead.


Не пойму, как исправить ошибку и написать правильную реализацию, чтобы получить данные по этим двум условиям. Помогите разобраться. Заранее благодарен за помощь.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@luna3956
Ошибки:

1 - сортировка всегда должна предшествовать другим операциям в записи, то есть
ref.OrderBy(KEY_PRIORITY).whereGreaterThan(key_priority, 1)


2 - startAt не определяет первую букву поля.

Есть два решения - либо вы тянете все записи с приоритетом выше 1(то есть просто
collectionReference.whereGreaterThan(KEY_PRIORITY, 1)
) и уже на клиенте отсеиваете все, которые начинаются не на "А", либо вводите дополнительное поле, например, firstLetter и помещаете туда для каждой записи первую букву. В таком случае запрос будет выглядеть примерно так:

collectionReference.whereEqualTo("firstLetter", "A").whereGreaterThan(KEY_PRIORITY, 1);


UPD: как попробуете дайте обратную связь получилось или нет)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы