MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Entwerfen von Many-to-Many-Beziehungen in MongoDB (anstelle von relationalen Tabellen)

Dies ist ein Fall, in dem die Daten mit einer Viele-zu-Viele-Beziehung vorliegen. Ich denke, Ihre Datenbank enthält einige tausend Studenten und einige hundert Kurse.

Zunächst kann ich das folgende Design mit Kursdetails verwenden, die in jeden Schüler als eine Reihe von Unterdokumenten eingebettet sind, die als courses bezeichnet werden .

- students collection
id:
name:
courses: [ { id: 1, name: },  { id: 5, name: }, ... ]

- courses collection
id:
name:
description:

Beachten Sie, dass die Kurs-ID und der Name in beiden Sammlungen gespeichert werden. Dies ist eine Duplizierung von Daten. Dies sollte in Ordnung sein, da sich die duplizierten Details nicht oft (oder überhaupt nicht) ändern.

Fragen Sie alle Kurse ab, in die ein Student eingeschrieben ist, zum Beispiel:db.students.find( { name: "John" } ) . Dadurch wird ein Studentendokument mit dem passenden Namen und allen Kursen (das Array-Feld) zurückgegeben. Siehe db.collection.find .

Fragen Sie alle Studenten ab, die in einem bestimmten Kurs eingeschrieben sind:db.students.find( { "courses.name": "Java Programming" } ) . Dadurch werden alle Studentendokumente zurückgegeben, deren Kursname mit dem Kriterium "Java-Programmierung" übereinstimmt. Siehe Ein Array eingebetteter Dokumente abfragen .

Außerdem können Sie Projektion verwenden ausschließen und einschließen Felder aus dem Ergebnis.

HINWEISE:

  • Sie können Studenteninformationen in die Kurssammlung einbetten, anstatt die Kurse in die Studenten einzubetten. Die Abfragen ähneln den oben genannten, aber Sie fragen die Kurssammlung ab. Das hängt von Ihrem Anwendungsfall ab.
  • Sie können das Kurs-ID-Feld einfach im Kurs-Array der Studentensammlung speichern; Dies ist der Fall, wenn sich das Feld für den Kursnamen häufig ändert. Die Abfragen verwenden die Aggregation $lookup (ein "Join"-Vorgang), um den Kurs und die Kurssammlung abzurufen.
  • Informationen zum Datenmodelldesign für dokumentbasierte MongoDB-Daten.