Firebase Cloud Firestore Design - PullRequest
       0

Firebase Cloud Firestore Design

0 голосов
/ 02 апреля 2019

У меня проблемы с завершением дизайна приложения для Android, над которым я работаю. У меня есть три основные группы, в которых мне нужно хранить данные; Хосты, волонтеры и события. Проблема, с которой я сталкиваюсь, заключается в том, что в большинстве событий будет более одного добровольца, и я не знаю, как мне следует структурировать коллекции, чтобы я мог запрашивать в своей базе данных все события, созданные хостом, и всех добровольцев в каждом событии.

В настоящее время у меня есть 3 коллекции высшего уровня; Хосты, волонтеры и события. Тем не менее, мне интересно, если это действительно лучший способ для этого, и может ли кто-нибудь объяснить, как запросить базу данных для всех добровольцев в рамках каждого мероприятия с этим дизайном.

Если это не лучший способ сделать это, то я был бы признателен, если бы кто-то мог объяснить другой подход и как он будет работать.

1 Ответ

1 голос
/ 03 апреля 2019

У меня есть 3 коллекции высшего уровня

Это распространенный способ структурирования базы данных Cloud Firestore.

может кто-нибудь объяснить, как сделать запрос базы данных для всех добровольцев в рамках каждого мероприятия с этим дизайном.

Возможная структура базы данных может быть:

Firestore-root
  |
  --- volunteers (collection)
  |    |
  |    --- volunteerId (document)
  |          |
  |          --- //Volunteer properties
  |          |
  |          --- eventIds: ["generatedEventId", "generatedEventId"]
  |
  --- events (collection)
       |
       --- eventId (document)
             |
             --- //Event properties

Как видите, я добавил eventId в качестве значения в массиве eventIds, поскольку volunteer может участвовать более чем в одном событии. Чтобы получить всех добровольцев в рамках каждого мероприятия, вы можете использовать следующий запрос:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference volunteersRef = rootRef.collection("volunteers");
Query query = volunteersRef.whereArrayContains("eventIds", "generatedEventId");

Где generatedEventId - это идентификатор вашего мероприятия, в котором участвуют волонтеры.

Поскольку вы не выбрали тег для платформы, я написал вышеупомянутые строки кода в Android, но его можно просто написать и для других языков программирования.

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