моделирование данных и правила безопасности - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь смоделировать 2 концепции в firestore, а также связать

collection: users
key/document_id: email
document: profile info

collection: topics
key/document_id: random
document: metadata with a field indicating email of user (to use for lookups)

Моя цель -

  • "справочные" темы в пользователях для облегчения поиска, но я не уверен как это сделать, кроме вложенной коллекции.
  • На основании электронной почты, которая будет передаваться как часть аутентификации, я хочу иметь правило безопасности, разрешающее запись в коллекцию только по пути, поле, основанное на электронной почте

Оба из вышеперечисленных возможно в Firebase. Цените любые указатели!

1 Ответ

1 голос
/ 19 февраля 2020

Преамбула : Не существует ОДНОГО и только ОДНОГО правильного подхода при Нет SQL моделировании данных

Ваш подход кажется верным, однако я бы предложил следующие адаптации:

«Справочные темы в пользователях для удобного поиска»:

Чтобы «справочные темы в пользователях для удобного поиска» вы могли продублировать список topics в массиве в user профиль. После этого вы сможете использовать array-contains (и другие членство в массиве методы) для ваших запросов. (Однако обратите внимание на ограничение оператора in).

Преимущество такого подхода: вам нужно запросить только один документ, чтобы получить все темы пользователя. Возможный недостаток: существует ограничение на размер документа (и для отдельного значения поля), которое составляет максимум 1 МБ (1 048 576 байт), см. do c.

Вы можете легко поддерживать в syn c массив topics и вложенную коллекцию topics, комбинируя пакетную запись и arrayUnion() и arrayRemove() методы .


Используйте идентификатор пользователя вместо электронной почты для do c Идентификаторы и правила безопасности:

Вместо использования электронной почты в качестве users идентификатора документа коллекции и использования его в Правила безопасности, используйте идентификатор пользователя. См. Примеры в do c.

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