Świetne pytanie. Pozwól, że najpierw nakreślę trochę, jak działa relacja N:N, a następnie omówię szczegółowo każdy z Twoich wypunktowań.
N:N w MySQL zwykle masz tabelę przestawną kojarzącą użytkownika z zainteresowaniami (tabela user_interests). W mongo robisz to trochę inaczej. Nadal masz kolekcję użytkowników i zainteresowań, ale teraz przechowujesz listę kluczy objętych zainteresowaniami dla użytkownika. WIĘC coś takiego:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Przechowując swoje zainteresowania na liście, która jest zapisana w tabeli zainteresowań, możesz wykonać każdą z wymaganych czynności. Jeśli chcesz wykonać zapytanie, możesz to zrobić na podstawie identyfikatora, który znajduje się w tabeli zainteresowań, wykonaj zapytanie, używając modyfikator $in .
Teraz, jeśli chodzi o kolekcję zainteresowań, zrobię co następuje:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Podczas dodawania zainteresowania do dokumentu użytkownika zmienna licznika będzie zależeć od definicji Twoich ocen. Jeśli przechowujesz swoje oceny w oddzielnym obszarze (lub logicznie), wtedy wartość, którą im przypisałeś, będzie tym, co odniesiesz do wartości int będącej przedmiotem zainteresowania. IE:Użytkownik ocenia to meh (która ma wartość 1), a następnie dodałbyś 1 do wartości licznika.
Mam nadzieję, że jest to pomocne i przynajmniej przyniosło kilka innych pomysłów na jego strukturę!
Powodzenia, pamiętaj, że MONGO JEST NIESAMOWITE.