Excellente question. Permettez-moi d'abord de décrire un peu le fonctionnement de la relation N:N, puis j'entrerai dans les détails de chacun de vos points.
N:N dans MySQL, normalement, vous avez votre tableau croisé dynamique associant votre utilisateur et vos intérêts (table user_interests). En mongo, vous faites cela un peu différemment. Vous avez toujours une collection d'utilisateurs et d'intérêts, mais à la place maintenant, vous stockez une liste de clés sous les intérêts d'un utilisateur. ALORS quelque chose comme ça :
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
En stockant vos centres d'intérêt dans une liste cochée sur votre tableau des centres d'intérêt, vous pouvez effectuer chacune des actions dont vous avez besoin. Si vous vouliez faire une requête, vous la feriez en fonction de l'ID qui se trouve dans la table d'intérêt, puis faites une requête en utilisant le modificateur $in .
Maintenant, pour votre collection d'intérêts, je ferais ce qui suit :
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Lors de l'ajout d'un intérêt à un document d'utilisateurs, la variable de comptage dépendrait alors de la définition de vos notes. Si vous stockez vos évaluations dans une zone distincte (ou dans la logique), la valeur que vous leur avez attribuée serait alors celle que vous associez à la valeur int qui vous intéresse. IE :l'utilisateur l'évalue meh (qui a une valeur de 1), puis vous ajouterez 1 à la valeur de comptage.
J'espère que cela est utile et a au moins apporté d'autres idées sur la façon de le structurer !
Bonne chance, rappelez-vous que MONGO EST IMPRESSIONNANT.