Теперь у меня проблема в том, что подколлекции не появятся в querysnapshot (я получаю только поля)
Правильно, именно так работают запросы Cloud Firestore.Запросы называются мелкими, что означает, что они получают только элементы из коллекции, к которой выполняется запрос.Невозможно получить документы из коллекции верхнего уровня и вложенных коллекций в одном запросе.Firestore не поддерживает запросы к различным коллекциям за один раз.Один запрос может использовать свойства документов только в одной коллекции.Вот почему ypu не может видеть вложенную коллекцию в объекте querysnapshot
, поэтому вы можете выполнить прямое сопоставление объектов.
, что является лучшим способом обработки данных такого типа (при условии, что нет места для нормализациии мы не можем избежать вложенных коллекций)?
В этом случае вам следует дважды выполнить запрос к базе данных, один раз, чтобы получить объекты в коллекции, и второй, чтобы получить все объекты в коллекции.
Существует также другая практика, которая называется денормализация и является обычной практикой, когда дело доходит до Firebase.Этот метод подразумевает также двойной запрос к базе данных.Если вы новичок в базах данных NoQSL, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase для лучшего понимания.Это для базы данных реального времени Firebase, но те же правила применяются к Cloud Firestore.
Также, когда вы дублируете данные, есть одна вещь, которую нужно иметь в виду.Точно так же, как вы добавляете данные, вы должны поддерживать их.Другими словами, если вы хотите обновить / обнаружить элемент, вы должны делать это в каждом месте, где он существует.
Таким образом, в этом случае вы можете денормализовать ваши данные, создав коллекцию верхнего уровня вкоторый вы должны добавить все объекты, которые существуют в ваших вложенных коллекциях.Вам решать, какая практика лучше для вас.