Dette er et tilfælde af at have data med mange-til-mange-relation. Jeg vil tro, at der er få tusinde studerende og et par hundrede kurser i din database.
Til at starte med kan jeg bruge følgende design med kursusdetaljer indlejret med hver elev som en række underdokumenter kaldet courses
.
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
Bemærk, kursus-id og navn er gemt i begge samlinger. Dette er duplikering af data. Dette burde være i orden, da de duplikerede detaljer ikke ændres ofte (eller måske slet ikke ændres).
Forespørg alle kurser, som en studerende er tilmeldt, for eksempel:db.students.find( { name: "John" } )
. Dette vil returnere ét elevdokument med det matchende navn og alle kurserne (arrayfeltet). Se db.collection.find
.
Forespørg alle elever, der er tilmeldt et bestemt kursus:db.students.find( { "courses.name": "Java Programming" } )
. Dette vil returnere alle de studerendes dokumenter, som har kursusnavnet, der matcher kriterierne "java programmering". Se Forespørg en række indlejrede dokumenter
.
Yderligere kan du bruge projektion at ekskludere og inkludere felter fra resultatet.
BEMÆRKNINGER:
- Du kan indlejre elevoplysninger i kursussamlingen i stedet for kurserne i eleverne. Forespørgslerne vil ligne ovenstående, men du vil forespørge på kursussamlingen. Det afhænger af din brugssituation.
- Du kan bare gemme kursus-id-feltet i kurser-arrayet i elevsamlingen; dette er tilfældet, hvor du ofte skifter kursusnavn. Forespørgslerne bruger Aggregation $lookup (en "join" operation) for at få kurset og fra kursussamlingen.
- Oplysninger om Datamodeldesign for dokumentbaserede MongoDB-data.