Мне нужно запросить коллекцию игр и найти все игры, в которых выбранная команда является либо домашней, либо выездной.
В официальной документации Cloud Firestore относительно такого рода запросов содержится достаточно четкая К сожалению, есть некоторые ограничения запроса , когда дело доходит до Firestore:
Cloud Firestore не поддерживает следующие типы запросов:
- Логические ИЛИ запросы. В этом случае вы должны создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении.
Таким образом, вы не можете запросить коллекцию, чтобы найти все игры, в которых выбранная команда или домашняя команда или выездная команда за один раз.
Я бы хотел дважды запросить вашу базу данных и объединить результаты этих запросов на стороне клиента. Это не идеально, так как вам нужно сделать запрос дважды, но я думаю, что это поможет.
Для Android вы можете объединить два запроса локально:
Но, согласно ответу Фрэнка ван Пуффелена на ту же тему:
ИЛИ запросы, поскольку они потребуют пропуска по индексу, что сделает невозможным гарантировать производительность. Обратите внимание, что в настоящее время ведется работа по поддержке подмножества возможных запросов IN, чтобы вы могли запросить что-то вроде «дайте мне все рестораны, где подают блюда тайской или итальянской кухни».
Вы можете подождать, пока эта функция станет доступной, или использовать моё решение выше.
Должны ли у меня быть ссылки на команды, сгенерированные там пожарным магазином, или я должен искать названия команд?
В большинстве случаев мы обычно используем идентификаторы пользователей, а не имена, причина в том, что имена могут изменяться, а идентификаторы - нет. Но решать вам, лучше ли искать по именам, а не по идентификаторам.
P.S. Если вы вместо "OR"
запрашиваете запрос "AND"
, обратите внимание, что допускается объединение в цепочку нескольких вызовов whereTo()
.