sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - skal mit brugerdokument indeholde en liste over projekt-id'er?

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.




  1. Intern serverfejl ved migrering af Parse til Heroku/AWS

  2. nginx uwsgi websockets 502 Bad Gateway upstream lukkede for tidligt forbindelse under læsning af svarheader fra upstream

  3. MongoDB Aggregate &Grouping Issue i MeteorJS

  4. Filtrer med regex MongoDB C#-driver