Ótima pergunta. Deixe-me primeiro descrever um pouco de como funciona o relacionamento N:N, então entrarei em detalhes em cada um de seus pontos de bala.
N:N no MySQL normalmente você tem sua tabela dinâmica associando entre seu usuário e interesses (tabela user_interests). No mongo você faz isso um pouco diferente. Você ainda tem uma coleção de usuários e interesses, mas agora você armazena uma lista de chaves em interesses para um usuário. ENTÃO algo assim:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Ao armazenar seus interesses em uma lista que é codificada em sua tabela de interesses, você pode realizar cada uma das ações necessárias. Se você quisesse fazer uma consulta, você o faria com base no ID que está na tabela de interesses, então faça uma consulta usando o $in modificador .
Agora, para sua coleção de interesses, eu faria o seguinte:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Ao adicionar um interesse a um documento de usuário, a variável de contagem dependeria da definição de suas classificações. Se você estiver armazenando suas classificações em uma área separada (ou na lógica), o valor atribuído a elas seria o que você relacionaria ao valor int em interesse. IE:O usuário avalia isso meh (que tem um valor de 1), então você adicionaria 1 ao valor de contagem.
Espero que isso seja útil e pelo menos tenha trazido algumas outras idéias sobre como estruturá-lo!
Boa sorte, lembre-se MONGO É INCRÍVEL.