Dobrą praktyką z MongoDB (i innymi nierelacyjnymi magazynami danych) jest modelowanie danych tak, aby były łatwe do użycia/zapytania w aplikacji. W Twoim przypadku możesz rozważyć nieco denormalizację struktury i zapisać ocenę bezpośrednio w kolekcji blogów, dzięki czemu blog może wyglądać mniej więcej tak:
{
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 }
]
}
Chodzi o to, że obiekty w rates
tablica zawiera wszystkie dane potrzebne do wyświetlenia wpisu na blogu, wraz z ocenami, bezpośrednio w pojedynczym dokumencie. Jeśli potrzebujesz również zapytać o stawki w inny sposób (np. znaleźć wszystkie oceny wystawione przez użytkownika X), a witryna jest intensywnie czytana, możesz rozważyć również przechowywanie danych w Rates
kolekcja tak jak teraz. Jasne, dane znajdują się w dwóch miejscach i trudniej je zaktualizować, ale może to przynieść ogólne korzyści po przeanalizowaniu aplikacji i sposobu, w jaki uzyskuje ona dostęp do danych.
Zauważ, że możesz zastosować indeksy głęboko w strukturze dokumentu, więc na przykład możesz zaindeksować News.rates.client_id
, a następnie możesz szybko znaleźć dowolne dokumenty w News
kolekcja oceniona przez konkretnego użytkownika.