Skvělá otázka. Dovolte mi nejprve nastínit trochu toho, jak funguje vztah N:N, a poté se podrobně rozepíšu o každém z vašich bodů.
N:N v MySQL normálně máte svou kontingenční tabulku sdružující uživatele a zájmy (tabulka user_interests). V mongo to děláte trochu jinak. Stále máte kolekci uživatelů a zájmů, ale místo toho nyní ukládáte seznam klíčů pod zájmy pro uživatele. Takže něco takového:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Uložením vašich zájmů do seznamu, který je vyklíčován na vaší tabulce zájmů, můžete provádět každou z akcí, které požadujete. Pokud byste chtěli zadat dotaz, který byste odeslali na základě ID, které je v tabulce zájmů, proveďte dotaz pomocí modifikátor $in .
Nyní pro vaši sbírku zájmů bych udělal následující:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Při přidávání zájmu do uživatelského dokumentu by pak proměnná počtu závisela na definici vašich hodnocení. Pokud svá hodnocení ukládáte do samostatné oblasti (nebo logicky), pak hodnota, kterou jste jim přiřadili, by odpovídala tomu, co se vztahuje k hodnotě int v zájmu. IE:Uživatel to hodnotí meh (což má hodnotu 1), pak byste k hodnotě počtu přidali 1.
Doufejme, že je to užitečné a přineslo to alespoň nějaké další nápady, jak to strukturovat!
Hodně štěstí, pamatujte, že MONGO JE ÚŽASNÉ.