Godt spørgsmål. Lad mig først skitsere lidt af, hvordan N:N-forholdet fungerer, så vil jeg gå i detaljer om hvert af dine punktopstillinger.
N:N i MySQL har du normalt din pivottabel associeret mellem din bruger og interesser (brugerinteressertabel). I mongo gør man det lidt anderledes. Du har stadig en bruger- og interessesamling, men i stedet gemmer du nu en liste over nøgler under interesser for en bruger. SÅ noget som dette:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Ved at gemme dine interesser i en liste, som er slået fra på din interessetabel, kan du udføre hver af de handlinger, du har brug for. Hvis du ville lave en forespørgsel, ville du vælge den baseret på det ID, der er i interessetabellen, og derefter lave en forespørgsel ved hjælp af $in modifikator .
Til din interesseindsamling vil jeg gøre følgende:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Når du tilføjer en interesse til et brugerdokument, vil tællevariablen afhænge af definitionen af dine vurderinger. Hvis du gemmer dine vurderinger i et separat område (eller i logik), så ville den værdi, du tildelte dem, være det, du relaterer til int-værdien i interesse. IE:Brugeren vurderer det meh (som har en værdi på 1), så vil du tilføje 1 til tælleværdien.
Forhåbentlig er dette nyttigt og har i det mindste bragt nogle andre ideer til, hvordan det kan struktureres!
Held og lykke, husk MONGO ER FANTASTISK.