sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - ska mitt användardokument innehålla en lista över projekt-ID?

En user kan ha många projects (och ett projekt är bara kopplat till en användare). Det här är en en-till-många förhållande.


Varje user bör lagra listan över hans/hennes projects . Till exempel:

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. } },
         ...
    ]

Observera att varje projects är ett underdokument (objekt eller inbäddat dokument) inom projects array. Ett projects har sina relaterade detaljer som, projectId , projectName , etc..


Jag tycker att det bara borde finnas en samling kallas user_projects . Förutsatt att:(i) en user kan ha 0 till 100 projekt, och (ii) ett projects s detaljer är inte alltför stora.

Detta är en modell för att bädda in den "många" sidan av 1-till-N-relationen i den "ena" sidan. Detta är ett rekommenderat sätt att denormalisera data. Detta har fördelen av effektiva och snabba frågor. Detta förenklar transaktioner, eftersom skrivningar (infogar, uppdateringar och raderingar) kommer att vara atomär med en enda operation till ett dokument inom samma samling.


Du kommer att använda user id eller name (med ett unikt index) för att hämta ett dokument, och det kommer att vara mycket snabb fråga. Du kan ha index på projects array (index på arrayfält kallas Multikey Indexes ) - på projektets fält. Till exempel, indexera på projectId eller/och projectName vettigt.

Du kan få alla projekt för en användare - det är en enkel fråga med user id / name . Fråga projektion tillåter vilken information relaterad till projects visas. Du kan använda en find eller aggregate metod för att bygga frågan. Du kan fråga ett specifikt projects för en user , med hjälp av projectId eller projectName . Eftersom det finns index på user och projects fält, kommer detta att vara en effektiv fråga.

Så min rekommendation är att ha en enda samling, user_projects , med en user s information och projects information inbäddad i den.




  1. MongoDb Select Query Issue Whit Regular Expression (börjar med och slutar med)

  2. Problem att köra exempel i Meteor

  3. mongoimport Docker misslyckades:fel vid anslutning till db-servern:inga tillgängliga servrar

  4. Underscheman på Mongoose utan matriser