Страхотен въпрос. Нека първо очертая малко как работи връзката N:N, след което ще навляза в подробности за всяка от вашите точки.
N:N в MySQL обикновено имате своя обобщена таблица, свързваща вашия потребител и интереси (таблица user_interests). В mongo правите това малко по-различно. Все още имате колекция от потребители и интереси, но вместо това сега съхранявате списък с ключове под интереси за даден потребител. И така, нещо подобно:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Съхранявайки интересите си в списък, който е изключен от таблицата с интереси, можете да извършвате всяко от действията, които искате. Ако искате да направите заявка, бихте я направили въз основа на идентификатора, който е в таблицата с интереси, след това направете заявка, използвайки $in модификатор .
Сега за вашата колекция от интереси бих направил следното:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Когато добавяте интерес към потребителски документ, променливата за броене ще зависи от определението на вашите оценки. Ако съхранявате оценките си в отделна област (или в логиката), тогава стойността, която сте им присвоили, ще бъде това, което свързвате тогава с int стойността в интерес. IE:Потребителят го оценява meh (което има стойност 1), тогава вие бихте добавили 1 към стойността на броя.
Надяваме се, че това е полезно и поне е довело до някои други идеи как да го структурирате!
Успех, не забравяйте, че МОНГО Е СТРАХОТЕН.