Een goede gewoonte met MongoDB (en andere niet-relationele gegevensopslag) is om uw gegevens te modelleren zodat ze gemakkelijk te gebruiken/opvragen in uw toepassing zijn. In jouw geval zou je kunnen overwegen om de structuur een beetje te denormaliseren en de beoordeling direct in de blogverzameling op te slaan, zodat een blog er ongeveer zo uit kan zien:
{
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 }
]
}
Het idee is dat de objecten in de rates
array bevat alle gegevens die u nodig hebt om het blogbericht, compleet met beoordelingen, in één document weer te geven. Als u de tarieven ook op een andere manier moet opvragen (bijv. alle beoordelingen van gebruiker X vinden), en de site lees-intensief is, kunt u ook overwegen het opslaan van de gegevens in een Rates
verzamelen zoals u nu doet. Natuurlijk, de gegevens bevinden zich op twee plaatsen en het is moeilijker om ze bij te werken, maar het kan een algemene overwinning zijn nadat je je app hebt geanalyseerd en hoe deze toegang krijgt tot je gegevens.
Merk op dat u indexen diep in de structuur van een document kunt toepassen, zodat u bijvoorbeeld News.rates.client_id
kunt indexeren. , en dan kunt u snel alle documenten vinden in de News
verzameling die een bepaalde gebruiker heeft beoordeeld.