Cloud Firestore
автоматически создает индексов на отдельных полях ваших документов.Сложные индексы, охватывающие несколько полей, могут быть созданы только вручную в Firebase Console .К сожалению, вы не можете программно создавать индексы, по крайней мере, на данный момент.
В вашем сценарии вы обязательно должны использовать денормализацию.Одна из причин использования денормализации состоит в том, что существует также ограничение на максимальный размер документа, равное 1Mib
.Поэтому, если у вас слишком много участников, вы можете очень быстро достичь этого предела.См. Здесь Квоты и ограничения Firestore .
Итак, вам, как правило, следует подумать об увеличении структуры данных, чтобы разрешить обратный поиск.Например, я бы добавил вложенную коллекцию participating
, в которой вы храните списки для каждого пользователя или можете добавить ее в качестве коллекции верхнего уровня, и ваша структура базы данных должна выглядеть следующим образом:
Firestore-root
|
--- users (collection)
| |
| --- userId (document)
| |
| --- //user details
|
--- userEvents (collection)
| |
| --- userId (document)
| |
| --- events (collection)
| |
| --- eventId
| |
| --- //event details
|
--- events (collection)
|
--- eventId (document)
|
--- //event details
Использование этогоСтруктура базы данных, вы можете очень быстро запросить вашу базу данных, чтобы получить все события, которые соответствуют конкретному пользователю.И, насколько я знаю, это единственные варианты, которые у вас есть.