user
може да има много projects
(и един проект е свързан само с един потребител). Това е едно към много връзка.
Всеки user
трябва да съхранява списъка с неговите/нейните projects
. Например:
user:
id: <some value>,
name: <some value>,
email: <some value>,
projects: [
{ projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
{ projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
...
]
Имайте предвид, че всеки project
е поддокумент (обект или вграден документ) в рамките на projects
масив. project
има своите свързани подробности като projectId
, projectName
и т.н.
Мисля, че трябва да има само една колекция наричан като user_projects
. Ако приемем, че:(i) user
може да има от 0 до 100 проекта и (ii) project
подробностите на не са твърде големи.
Това е модел на вграждане на страната „много“ на връзката 1 към N в страната „едно“. Това е препоръчителен начин за денормализиране на данните. Това има предимството на ефективни и бързи заявки. Това опростява транзакциите, тъй като записите (вмъквания, актуализирания и изтривания) ще бъдат атомарни с една операция към документ в рамките на същата колекция.
Ще използвате user
id
или name
(с уникален индекс), за да извлечете документ и това ще бъде много бърза заявка. Можете да имате индекс на projects
масив (индексите на полетата на масива се наричат Индекси с множество ключове ) - на полетата на проекта. Например, индексирайте по projectId
или/и projectName
има смисъл.
Можете да получите всички проекти за потребител - това е проста заявка с помощта на user
id
/ name
. Заявка проекция позволява каква информация е свързана с project
се показва. Можете да използвате find
или aggregate
метод за изграждане на заявката. Можете да направите заявка за конкретен project
за user
, използвайки projectId
или projectName
. Тъй като има индекси на user
и project
полета, това ще бъде ефективна заявка.
Така че моята препоръка е да имате една колекция, user_projects
, с user
информацията на и projects
информация, вградена в него.