В документации Mongo есть полезные рекомендации для выбора модели данных .Вложенная модель, которую вы описываете выше, называется Embedded Data Model :
В целом, встраивание обеспечивает лучшую производительность для операций чтения, а также возможность запрашивать и извлекать связанныеданные в одной операции базы данных.Встроенные модели данных позволяют обновлять связанные данные в одной атомарной операции записи.
Встраивание документов упрощает получение данных из базы данных.С другой стороны, сложность добавления и обновления документов со сложной иерархией документов может быть сложной.
Монго называет традиционную структуру PK / FK Нормализованная модель данных
* 1018.*
Как правило, используйте нормализованные модели данных:
- , когда встраивание приведет к дублированию данных, но не обеспечит достаточных преимуществ в производительности чтения, чтобы перевесить последствия дублирования.
- для представления более сложных отношений «многие ко многим».
- для моделирования больших наборов иерархических данных.
Трубопровод агрегации может быть страшным, что может привести к появлению встроенных данныхМодель заманчивая.Если вы считаете, что это так, ознакомьтесь с бесплатным курсом по агрегационному конвейеру MongoDB .Нормализованная модель данных может быть более привлекательной, если вы можете уверенно извлекать связанные данные из коллекций.
Тестируйте запросы чтения / записи с небольшим набором данных для каждой модели.Вы получите ясность о преимуществах и проблемах каждого подхода.Для моего текущего проекта я обнаружил, что нормализованная модель данных упростила многие требуемые операции записи.В конечном счете, разделение задач, таких как заказы и пользователей на отдельные коллекции, оказалось проще, особенно когда я понял, как использовать $ lookup для объединения данных из связанных коллекций.