Das hängt davon ab, was Sie erreichen wollen.
Sie haben sie derzeit als normalisierte Datenbank eingerichtet, was in Ordnung ist, und die Art und Weise, wie Sie es tun, ist angemessen.
Es gibt jedoch auch andere Möglichkeiten, dies zu tun.
Sie könnten eine Sammlung von Beiträgen haben, die eingebettete Kommentare für jeden Beitrag mit Verweisen auf die Benutzer enthält, die Sie iterativ abfragen können, um sie zu erhalten. Sie könnten den Namen des Benutzers mit den Kommentaren speichern, Sie könnten sie alle in einem Dokument speichern.
Das Besondere an NoSQL ist, dass es für flexible Schemata und sehr schnelles Lesen und Schreiben ausgelegt ist. In einer typischen Big-Data-Farm ist die Datenbank der größte Engpass, man hat weniger Datenbank-Engines als Anwendungs- und Front-End-Server... sie sind teurer, aber leistungsfähiger, und auch der Festplattenspeicher ist vergleichsweise sehr günstig. Die Normalisierung beruht auf dem Konzept der Platzersparnis, hat aber den Preis, dass Ihre Datenbanken komplizierte Joins durchführen, die Integrität von Beziehungen überprüfen und kaskadierende Operationen durchführen müssen. All dies erspart den Entwicklern einiges an Kopfzerbrechen, wenn sie die Datenbank richtig konzipiert haben.
Wenn Sie bei NoSQL davon ausgehen, dass Redundanz und Speicherplatz aufgrund ihrer Kosten (sowohl in Bezug auf die für Aktualisierungen erforderliche Prozessorzeit als auch auf die Festplattenkosten für die Speicherung zusätzlicher Daten) keine Rolle spielen, ist die Denormalisierung kein Problem (bei eingebetteten Arrays, die Hunderttausende von Elementen umfassen, kann dies ein Leistungsproblem darstellen, aber in den meisten Fällen ist dies kein Problem). Außerdem werden Sie mehrere Anwendungs- und Front-End-Server für jeden Datenbank-Cluster haben. Lassen Sie diese die schwere Arbeit der Joins erledigen und überlassen Sie den Datenbankservern das Lesen und Schreiben.
TL;DR: Was Sie tun, ist in Ordnung, und es gibt andere Möglichkeiten, es zu tun. Schauen Sie sich die Datenmodellmuster der Mongodb-Dokumentation für einige großartige Beispiele an. http://docs.mongodb.org/manual/data-modeling/
67 Stimmen
Die letzte Antwort auf diese Frage ist wahrscheinlich die wichtigste, da MongoDB 3.2+ eine Join-Lösung namens $lookup implementiert hat. Ich dachte, ich würde sie hier einfügen, weil vielleicht nicht jeder bis zum Ende liest. stackoverflow.com/a/33511166/2593330
10 Stimmen
Richtig, $Nachschlag wurde in MongoDB 3.2 eingeführt. Einzelheiten finden Sie unter docs.mongodb.org/master/reference/operator/aggregation/lookup/
0 Stimmen
Konvertieren Sie eine beliebige Abfrage in Mongo und prüfen Sie die Antwort: stackoverflow.com/questions/68155715/
2 Stimmen
Ich glaube, die ursprüngliche Absicht von NoSQL war, dass man Daten so speichert, wie man sie abrufen möchte. Also speichern Sie sie auf diese Weise und rufen Sie sie auf diese Weise ab