Лучший способ хранить данные в MongoDB - PullRequest
0 голосов
/ 29 марта 2020

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

  • Коллекция пользователей с документами, которые содержат идентификатор пользователя и идентификатор группы.
  • Коллекция задач с документами, которые содержит идентификатор задачи, идентификатор пользователя, который его создал, и идентификатор группы.
  • Коллекция ответов с документами, которые содержат идентификатор ответа, идентификатор пользователя, который его создал, и идентификатор задачи, с которой он связан.

При таком подходе все было бы отдельно. Проблема в том, что если мне нужно получить каждый ответ для задачи для каждого пользователя в группе. Мне нужно было бы go пройти через всех пользователей и найти тех, кто входит в группу, затем мне нужно go просмотреть все ответы и найти ответы, которые относятся к задаче A, а B созданы пользователем group.

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

Так что в основном один модальный или несколько модальных. Каков наилучший подход здесь?

1 Ответ

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

Я бы предложил:

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

Архитектура MongoDB: как хранить большое количество массивов или вложенных документов в масштабируемом виде

...