Firestore - запрос нескольких полей - PullRequest
0 голосов
/ 03 апреля 2020

Я собираюсь создать простое приложение для чата, используя Flutter + Firestore, храня пользователей и чаты в отдельных коллекциях. Каждый документ чата имеет два строковых поля [uid1, uid2], представляющих идентификаторы пользователей соответствующих участников. Мне нужно иметь возможность искать все чаты для данного пользователя (uid), так что некоторый тип запроса ИЛИ, это было бы возможно, сохраняя их в поле массива и используя array_contains.

Однако, чтобы обновить документ чата, мне нужно иметь возможность напрямую запрашивать оба поля для получения конкретного чата c между двумя пользователями, что было бы невозможно при использовании подхода массива (вложенные массивы не положено). Даже хранение обоих в виде двух строковых полей верхнего уровня требует двух запросов к хранилищу в обоих направлениях.

Примите во внимание любые советы о том, как решить это ограничение запросов Firestore?

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете создать составное поле, содержащее все данные, необходимые для запроса, объединяя оба идентификатора пользователя в одну строку. Не забудьте отсортировать идентификаторы перед тем, как сделать это, чтобы обеспечить их предсказуемый порядок.

Итак, если у вас есть пользователь "A" и пользователь "B", значение составного поля будет просто " AB "(и никогда" BA "), и вы можете отфильтровать это поле, чтобы найти все сообщения между этими двумя пользователями.

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