En user
kan have mange projects
(og et projekt er kun knyttet til én bruger). Dette er en en-til-mange forhold.
Hver user
skal gemme listen over hans/hendes projects
. For eksempel:
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. } },
...
]
Bemærk, at hvert project
er et underdokument (objekt eller indlejret dokument) i projects
array. Et project
har sine relaterede detaljer som, projectId
, projectName
osv..
Jeg synes, der kun skal være én samling kaldet user_projects
. Forudsat at:(i) en user
kan have 0 til 100 projekter, og (ii) et project
's detaljer er ikke for store.
Dette er en model for indlejring af 'mange'-siden af 1-til-N-forholdet i 'én'-siden. Dette er en anbefalet måde at denormalisere dataene. Dette har fordelen af effektive og hurtige forespørgsler. Dette forenkler transaktioner, da skrivninger (indsættelser, opdateringer og sletninger) vil være atomare med en enkelt operation til et dokument inden for samme samling.
Du vil bruge user
id
eller name
(med et unikt indeks) for at hente et dokument, og det vil være meget hurtig forespørgsel. Du kan have indeks på projects
matrix (indekser på matrixfelter kaldes Multikey Indexes ) - på projektets marker. Indeks for eksempel på projectId
eller/og projectName
giver mening.
Du kan få alle projekter for en bruger - det er en simpel forespørgsel ved hjælp af user
id
/ name
. Forespørg på projektion tillader hvilken information relateret til project
vises. Du kan bruge en find
eller aggregate
metode til at bygge forespørgslen. Du kan forespørge et specifikt project
for en user
, ved hjælp af projectId
eller projectName
. Da der er indekser på user
og project
felter, vil dette være en effektiv forespørgsel.
Så min anbefaling er at have en enkelt samling, user_projects
, med en user
s oplysninger og projects
information indlejret i den.