Firestore "Неверный запрос" - я неправильно использую индексирование? - PullRequest
0 голосов
/ 18 января 2019

Я создаю приложение с базой данных Firestore firebase cloud со следующей структурой: enter image description here

Я делаю запрос к книгам пользователя, где поле «StartDate» больше 0, а «EndDate» равно 0, этот запрос затем должен быть упорядочен по заголовку.

CollectionReference booksCollection = mFirebaseDatabase.collection("users").document(user.getUid()).collection("books");

Query databaseQuery = booksCollection.whereGreaterThan("StartDate", 0).whereEqualTo("EndDate", 0).orderBy("Title");

databaseQuery.get()

Чтобы сделать это, я прочитал, что вам нужно использовать индексацию (хотя я не получил ссылку на индексацию в сообщениях об ошибках, как указано, что я должен). мое индексирование выглядит так:

enter image description here

но я получаю сообщение об ошибке:

java.lang.IllegalArgumentException: неверный запрос. У вас есть неравенство, где фильтр (whereLessThan (), whereGreaterThan () и т. Д.) В поле «StartDate», и поэтому вы также должны иметь «StartDate» в качестве первого поля orderBy (), но ваш первый orderBy () в данный момент находится в поле Вместо «Заголовок».

1 Ответ

0 голосов
/ 18 января 2019

Запросы Firestore могут сортировать или фильтровать диапазон только по одному полю. Вы пытаетесь отфильтровать по StartDate, а затем заказать по Title, что невозможно.

Документация Firestore по запросам содержит подобный пример запроса, который не разрешен:

Неверно : фильтр диапазона и первый порядок по различным полям

citiesRef.whereGreaterThan("population", 100000).orderBy("country");

Firestore разрешает только те запросы, для которых он может соответствовать гарантиям производительности, и для упорядочивания / фильтрации по диапазону по нескольким полям, что (в настоящее время) невозможно. См. Видео Тодда по запросам Firestore , чтобы узнать больше о том, как это работает.

Типичный обходной путь - позволить Firestore обработать фильтр (в вашем случае - StartDate, а затем изменить порядок результатов в приложении Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...