Рекомендации по модели данных тегов Firestore (массив против словаря) - PullRequest
0 голосов
/ 22 марта 2020

Я бы хотел запросить несколько сообщений в firestore на основе введенных пользователем тегов. Всякий раз, когда пользователь отправляет сообщение, он также отправляет теги вместе с ним. Моя текущая структура данных выглядит следующим образом:

postId: {
    tags: {
      "firebase": true,
      "angular": true,
      "cats": false
    }
}

Однако приведенная выше структура данных затрудняет запрос. Я не могу использовать функцию arrayContainsAny, и мне придется загрузить все теги и проверить, является ли каждый тег / ключ истинным, а затем вернуть сообщения. Однако, если я сохраню теги в виде массива:

postId: {
    tags: {
      0: "firebase",
      1: "angular",
      2: "cats"
    }
}

, я мог бы использовать забаву firestore c, например postsCollection.whereField ("tags", arrayContainsAny: tagsArray) для быстрых запросов.

Более эффективно или масштабируемо хранить теги в виде массива?

Заранее спасибо!

1 Ответ

1 голос
/ 22 марта 2020

Не существует правильного или неправильного способа моделирования данных в базах данных типа SQL. Лучшая практика моделирования всегда зависит от запросов, которые вы хотите выполнить к нему.

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

Имейте в виду, что не каждая модель данных удовлетворяет каждому виду запроса. В данном конкретном случае массив выглядит лучше, но вы легко можете столкнуться с ситуацией для другого запроса, когда он вообще не работает.

...