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

Bedste model til at repræsentere mange til mange forhold med attributter i MongoDB

På mange måder opmuntrer meteors API til flade relationelle dokumenter, men MongoDB er et ikke-relationelt datalager. Denne konflikt er desværre efterladt som en øvelse for udvikleren at løse.

Begrebet skemastruktur og joinforbindelser er et enormt emne at dække i et enkelt svar, så jeg vil forsøge at være så kortfattet som muligt.

Grunde til, hvorfor du bør vælge en relationsmodel

Antag, at du har kommentar- og postdata. Overvej, hvad der ville ske, hvis du indlejrede kommentarer i dine indlæg.

  • DDP opererer på dokumenter. Alle kommentarer vil blive sendt hver gang en ny kommentar i det samme indlæg tilføjes.

  • allow og deny regler virker på dokumenter. Det kan være urimeligt at forvente, at de samme regler gælder samtidigt for både indlæg og kommentarer.

  • Publikationer har en tendens til at give mere mening med hensyn til samlinger. I ovenstående scenarie kunne vi ikke nemt offentliggøre en liste over kommentarer uafhængigt af deres indlæg.

  • Relationelle databaser findes af gode grunde. En af dem er at undgå det multiple modifikationsproblem, der er iboende i din anden løsning.

Grunde til, hvorfor du bør vælge en integreret model

  • Joins understøttes ikke indbygget af MongoDB, og der er ikke en kernepakke til at producere en reaktiv joinforbindelse.

Anbefalinger

Brug din tredje løsning. Efter min erfaring opvejer grundene til at vælge en relationsmodel langt de begrænsninger, som datalageret pålægger. Selvfølgelig er det ikke let at overvinde manglen på joinforbindelser, men smerten vil sandsynligvis være isoleret til kun en håndfuld publiceringsfunktioner. Her er nogle ressourcer, som jeg varmt kan anbefale:

  • Sådan udgiver du et mange-til-mange forhold på EventedMind. Chris dækker din eksakte use case i detaljer, men han udfører manuelt den reaktive join med observerede tilbagekald, hvilket jeg ikke anbefaler.

  • Reactive joins in meteor fra Discover Meteor Encyclopedia. Dette dækker det grundlæggende i, hvordan og hvorfor man bør lave en reaktiv joinforbindelse.

  • Denormaliseringskapitlet fra Discover Meteor. Dette dækker mange af de punkter, jeg gjorde ovenfor, og taler også om, hvornår og hvordan man denormaliserer nogle af dine data.

  • Du kan bruge Udgiv med relationer til at forbinde dine data. Alternative pakker omfatter:smart publicering, publicer sammensat og simpel publicering.

Hvis du har brug for mere information ud over dette, bedes du kommentere nedenfor, og jeg vil opdatere mit svar.



  1. Redis:For at indstille timeout for et nøgleværdipar i Set

  2. MongoDB $trim

  3. Forespørgsel efter et felt i et objekt i array med Mongo?

  4. Hvordan kan jeg implementere tilladelser på feltniveau til MongoDB?