Добра практика с MongoDB (и други нерелационни хранилища за данни) е да моделирате вашите данни, така че да са лесни за използване/запитване във вашето приложение. Във вашия случай може да обмислите малко денормализиране на структурата и съхраняване на оценката направо в колекцията на блогове, така че блогът може да изглежда по следния начин:
{
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 }
]
}
Идеята е, че обектите в rates
масивът съдържа всички данни, от които ще се нуждаете, за да покажете записа в блога, заедно с оценки, направо в един документ. Ако също така трябва да направите заявка за тарифите по друг начин (напр. да намерите всички оценки, направени от потребител X), и сайтът е много труден за четене, може да обмислите също съхраняване на данните в Rates
колекция, както правите сега. Разбира се, данните са на две места и е по-трудно да се актуализират, но може да е цялостна победа, след като анализирате приложението си и как то осъществява достъп до данните ви.
Имайте предвид, че можете да приложите индекси дълбоко в структурата на документа, така че например можете да индексирате News.rates.client_id
и след това можете бързо да намерите всякакви документи в News
колекция, която даден потребител е оценил.