Jest to przypadek posiadania danych w relacji wiele-do-wielu. Myślę, że w Twojej bazie danych jest kilka tysięcy studentów i kilkaset kursów.
Na początek mogę użyć następującego projektu ze szczegółami kursu osadzonymi w każdym uczniu jako tablica dokumentów podrzędnych o nazwie courses
.
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
Uwaga, identyfikator i nazwa kursu są przechowywane w obu kolekcjach. To jest powielanie danych. To powinno być w porządku, ponieważ zduplikowane szczegóły nie zmieniają się często (lub mogą wcale się nie zmieniać).
Zapytanie o wszystkie kursy, na które student jest zapisany, na przykład:db.students.find( { name: "John" } )
. Spowoduje to zwrócenie jednego dokumentu ucznia z pasującą nazwą i wszystkimi kursami (pole tablicy). Zobacz db.collection.find
.
Zapytaj wszystkich studentów zapisanych na konkretny kurs:db.students.find( { "courses.name": "Java Programming" } )
. Spowoduje to zwrócenie wszystkich dokumentów studentów, których nazwa kursu odpowiada kryteriom „Programowanie java”. Zobacz Zapytanie o tablicę osadzonych dokumentów
.
Ponadto możesz użyć rzutowania wykluczać i uwzględniać pola z wyniku.
UWAGI:
- Informacje o uczniach można umieszczać w kolekcji kursów, zamiast kursów w uczniach. Zapytania będą podobne do powyższych, ale będziesz odpytywać kolekcję kursów. To zależy od twojego przypadku użycia.
- Możesz po prostu zapisać pole identyfikatora kursu w tablicy kursów w kolekcji studentów; tak jest w przypadku, gdy pole nazwy kursu często się zmienia. Zapytania będą używać agregacji $lookup (operacja „dołącz”), aby pobrać kurs i kolekcję kursów.
- Informacje o projektowaniu modelu danych dla danych MongoDB opartych na dokumentach.