En bra praxis med MongoDB (och andra icke-relationella datalager) är att modellera din data så att den är enkel att använda/fråga i din applikation. I ditt fall kan du överväga att avnormalisera strukturen lite och lagra betyget direkt i bloggsamlingen, så en blogg kan se ut ungefär så här:
{
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 }
]
}
Tanken är att objekten i rates
array innehåller all data du behöver för att visa blogginlägget, komplett med betyg, direkt i det enda dokumentet. Om du också behöver fråga priserna på annat sätt (t.ex. hitta alla betyg gjorda av användare X), och webbplatsen är lästung, kan du överväga också lagra data i en Rates
insamling som du gör nu. Visst, data finns på två ställen och det är svårare att uppdatera, men det kan vara en övergripande vinst efter att du analyserat din app och hur den kommer åt din data.
Observera att du kan använda index djupt in i ett dokuments struktur, så att du till exempel kan indexera News.rates.client_id
, och sedan kan du snabbt hitta alla dokument i News
samling som en viss användare har betygsatt.