sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB – měl by můj uživatelský dokument obsahovat seznam ID projektů?

user může mít mnoho projects (a projekt je spojen pouze s jedním uživatelem). Toto je jedna k mnoha vztah.


Každý user by měl uchovávat seznam svých projects . Například:

user:
    id: <some value>,
    name: <some value>,
    email: <some value>,
    projects: [
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
         ...
    ]

Všimněte si, že každý project je dílčí dokument (objekt nebo vložený dokument) v rámci projects pole. project má související podrobnosti, jako je projectId , projectName , atd..


Myslím, že by měla existovat pouze jedna sbírka nazývá se user_projects . Za předpokladu, že:(i) user může mít 0 až 100 projektů a (ii) project Podrobnosti uživatele nejsou příliš velké.

Toto je model začlenění strany 'mnoho' vztahu 1-to-N do strany 'jedné'. Toto je doporučený způsob, který denormalizuje data. To má výhodu v efektivních a rychlých dotazech. To zjednodušuje transakce, protože zápisy (vkládání, aktualizace a mazání) budou atomické s jedinou operací s dokumentem ve stejné kolekci.


Budete používat user id nebo name (s jedinečným indexem) k načtení dokumentu a bude to velmi rychlý dotaz. Můžete mít index na projects pole (indexy v polích pole se nazývají Multikey indexy ) - na polích projektu. Například index na projectId nebo/a projectName dává smysl.

Můžete získat všechny projekty pro uživatele - je to jednoduchý dotaz pomocí user id / name . Dotaz projekce umožňuje, jaké informace souvisí s project je zobrazen. Můžete použít find nebo aggregate metoda k sestavení dotazu. Můžete se dotazovat na konkrétní project pro user pomocí projectId nebo projectName . Protože na user existují indexy a project pole, bude to efektivní dotaz.

Doporučuji tedy mít jedinou kolekci user_projects , s user informace a projects informace v něm obsažené.




  1. Názvy polí dokumentu nemohou začínat '$' (chybný klíč:'$set')

  2. Potřebuji načíst objekt MongoDB pouze pomocí položky filtrovaného pole

  3. MongoDB:Jak sjednotit všechny výsledky ze stejné kolekce?

  4. Meteor:Tracker.autorun / pozorovatel Změny a kolekce nefungují podle očekávání