En god praksis med MongoDB (og andre ikke-relationelle datalagre) er at modellere dine data, så det er nemt at bruge/forespørge i din applikation. I dit tilfælde kan du overveje at denormalisere strukturen lidt og gemme vurderingen direkte i blogsamlingen, så en blog kan se sådan ud:
{
title: "My New Post",
body: "Here's my new post. It is great. ...",
likes: 20,
dislikes: 5,
...
rates: [
{ client_id: (id of client), rate: 5 },
{ client_id: (id of another client), rate: 3 },
{ client_id: (id of a third client), rate: 10 }
]
}
Ideen er, at objekterne i rates
array indeholder alle de data, du skal bruge for at vise blogindlægget, komplet med vurderinger, direkte i det enkelte dokument. Hvis du også har brug for at forespørge priserne på en anden måde (f.eks. finde alle vurderinger lavet af bruger X), og siden er læsetung, kan du overveje også lagring af data i en Rates
indsamling, som du gør nu. Selvfølgelig er dataene to steder, og det er sværere at opdatere, men det kan være en samlet gevinst, efter du har analyseret din app, og hvordan den får adgang til dine data.
Bemærk, at du kan anvende indekser dybt ind i et dokuments struktur, så du for eksempel kan indeksere News.rates.client_id
, og så kan du hurtigt finde alle dokumenter i News
samling, som en bestemt bruger har bedømt.