Как сделать сложный запрос с FirestoreRecyclerAdapter? - PullRequest
0 голосов
/ 15 февраля 2019

Я разрабатываю приложение для Android, и мне нужно сделать сложный запрос к базе данных Firestore и создать FirestoreRecyclerAdapter.Для создания adpater мне нужен объект FirestoreRecyclerOptions, который принимает на вход весь запрос.Читая документацию, я не могу использовать в своем запросе методы whereGreaterThan, whereLessThan, oderBy и т. Д. Для разных параметров.Например, как я могу получить пользователей из БД, которые имеют возраст больше / меньше чем И, которые имеют вес больше / меньше чем?

Например, структура документа в моей базе данных firestore:

Users --->UserID--->userName(String)
            --->userAge(number)
            --->userHeight(number)
            --->userWeight(number)

FirebaseFirestore db;

db = FirebaseFirestore.getInstance();

RecyclerView recyclerView;

recyclerView = (RecyclerView)findViewById(R.id.recyclerViewID);
.
.
.

Query query = db.collection("Users").//the complex query that i need

FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
            .setQuery(query, User.class)
            .build();

adapter = new UsersAdapter(options, this);//get in input options and the context

recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

Редактировать: возможное решение в моем последнем комментарии, чтобы ответить 1

1 Ответ

0 голосов
/ 15 февраля 2019

Существуют некоторые ограничения запросов , когда дело доходит до Firestore:

Ограничения запросов

Облачное Firestore не поддерживает следующие типы запросов:

  • Запросы с фильтрами диапазона в различных полях, как описано в предыдущем разделе.

Таким образом, вы не можете запросить базу данных по фильтрам диапазона, используя whereGreaterThan() и whereLessThan() методы для различных свойств и передачи его адаптеру.

Редактировать:

Возможное решение этой проблемы - дважды фильтровать клиентскую часть записей.Сначала запросите базу данных, используя первое свойство, а затем - второе свойство.К сожалению, вы не можете достичь этого за один раз.

Edit2:

Решение состоит в том, чтобы запросить базу данных, используя первый запрос, получить соответствующие элементы, запроситьбазы данных снова с помощью второго запроса и получить соответствующие элементы, а затем объединить результаты на стороне клиента.Теперь элементы из базы данных были отфильтрованы дважды.Передайте список этих элементов адаптеру и все.Обратите внимание, что при использовании этого решения вы больше не можете использовать библиотеку Firebase-UI, но таким образом вы можете дважды фильтровать свои элементы.

...