Toto je případ, kdy jsou data ve vztahu Many-to-Many. Myslím, že ve vaší databázi je několik tisíc studentů a několik stovek kurzů.
Pro začátek mohu použít následující návrh s podrobnostmi o kurzu vloženými s každým studentem jako řadu dílčích dokumentů nazývaných courses
.
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
Všimněte si, že ID a název kurzu jsou uloženy v obou kolekcích. Jedná se o duplikaci dat. To by mělo být v pořádku, protože duplicitní detaily se často nemění (nebo se nemusí měnit vůbec).
Dotaz na všechny kurzy, do kterých je student zapsán, například:db.students.find( { name: "John" } )
. Tím se vrátí jeden studentský dokument s odpovídajícím jménem a všemi kurzy (pole pole). Viz db.collection.find
.
Zeptejte se všech studentů zapsaných do konkrétního kurzu:db.students.find( { "courses.name": "Java Programming" } )
. Tím se vrátí všechny dokumenty studentů, jejichž název kurzu odpovídá kritériím „programování v jazyce Java“. Viz Dotaz na pole vložených dokumentů
.
Dále můžete použít projekci vyloučit a zahrnout pole z výsledku.
POZNÁMKY:
- Informace o studentech můžete vložit do kolekce kurzů namísto kurzů do studentů. Dotazy budou podobné výše uvedeným, ale budete se dotazovat na kolekci kurzů. Záleží na vašem případu použití.
- Pole ID kurzu můžete pouze uložit do pole kurzů v kolekci studentů; to je případ, kdy se pole názvu kurzu často mění. Dotazy budou používat agregaci $lookup (operace „připojit se“) k získání kurzu a z kolekce kurzů.
- Informace o Návrhu datového modelu pro data MongoDB založená na dokumentech.