Med hensyn til dit første spørgsmål:
Du beder specifikt om en bedre måde at arbejde med børne-id'er på, som er gemt i forælderen. Jeg er ret sikker på, at der ikke er nogen bedre måde at håndtere dette på, hvis det skal være dette mønster.
Men dette problem findes også i relationelle databaser. Hvis du vil gemme dit indlæg i en relationsdatabase (ved at bruge det mønster), skal du også først oprette kommentaren, få dens ID og derefter opdatere indlægget. Indrømmet, du kan sende alle disse opgaver i en enkelt anmodning, hvilket sandsynligvis er mere effektivt end at bruge mongoose, men den type arbejde, der skal udføres, er den samme.
Med hensyn til dit andet spørgsmål:
Fordelen i forhold til variant A er, at du f.eks. kan få opslaget og med det samme vide, hvor mange kommentarer det har, uden at bede mongodb om at gennemgå sikkert hundredvis af dokumenter.
Fordelen i forhold til variant B er, at du kan gemme flere referencer til kommentarer i et enkelt dokument (et enkelt indlæg), end hele kommentarer, på grund af Mongos 16MB dokumentstørrelsesgrænse.
Ulempen er dog den, du nævnte, at det er ineffektivt at opretholde den struktur. Jeg tager det, at dette kun er et eksempel for at vise scenariet, så her er, hvad jeg ville gøre:Jeg ville fra sag til sag beslutte, hvad jeg skulle bruge.
-
Hvis dokumentet vil blive læst meget, og ikke meget skrevet til, OG det er usandsynligt, at det vokser sig større end 16 MB:Integrer underdokumentet. på denne måde kan du få alle data i en enkelt forespørgsel.
-
Hvis du har brug for at henvise til dokumentet fra multiple andre dokumenter OG dine data skal virkelig være konsistente, så har du intet andet valg end at referere til det.
-
Hvis du har brug for at henvise til dokumentet fra multiple andre dokumenter MEN datakonsistens er ikke så super vigtigt OG begrænsningerne fra det første punktum gælder, indlejr derefter underdokumenterne og skriv kode for at holde dine data konsistente.
-
Hvis du har brug for at henvise til dokumentet fra multiple andre dokumenter, og de bliver skrevet til meget, men ikke læst så ofte, du er nok bedre stillet til at henvise til dem, da dette er nemmere at kode, fordi du ikke behøver at skrive kode for at synkronisere duplikerede data.
I dette specifikke tilfælde (indlæg/kommentar) refererer forælderen fra barnet (at lade barnet kende forældrene _id
) er nok en god idé, fordi det er nemmere at vedligeholde end omvendt, og dokumentet kan vokse sig større end 16 MB, hvis de blev indlejret direkte. Hvis jeg med sikkerhed ved, at dokumentet IKKE ville være større end over 16 MB, ville det være bedre at indlejre dem, fordi det er hurtigere at forespørge dataene på den måde