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 информация, вградена в него.