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

So erstellen Sie verschachtelte Abfragen in MongoDb, die wie verschachtelte Sql-Auswahlabfragen funktionieren

Die Antwort auf solche Fragen in MongoDB lautet oft, Ihre Daten zu denormalisieren. Wenn Sie nur eine Liste der Benutzer in der Gruppe benötigen, können Sie die Benutzer-ID und speichern den Benutzernamen im Gruppendokument. In gewisser Weise strukturieren Sie Ihre Datenbank entsprechend dem Ergebnis, das Sie auf dem Bildschirm sehen möchten, anstatt zu versuchen, es in ein normalisiertes Format zu bringen.

Natürlich würde das nur funktionieren, wenn Ihre Benutzergruppenliste (mit Namen) in ein einziges Dokument passen würde, aber Ihr derzeitiger Ansatz hat auch einige Einschränkungen bezüglich der maximalen Größe einer Gruppe.

Ein anderer Ansatz wäre, die Gruppen, denen ein Benutzer angehört, in einem Array in jedem 'Benutzer'-Dokument zu speichern. Fügen Sie diesem Array-Feld einen Index hinzu, und jetzt können Sie Benutzer nach Gruppe finden. Angesichts der Tatsache, dass ein Benutzer wahrscheinlich weniger Gruppen angehört, als es Mitglieder in einer Gruppe gibt, ist dies hier möglicherweise der beste Ansatz.

db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Auch hier könnten Sie den Gruppennamen mit seiner _id speichern, damit Sie die Liste der Gruppen, denen ein Benutzer angehört, sofort mit einem einzigen Roundtrip anzeigen können. Wenn Sie zulassen, dass sich ein Gruppenname ändert, müssen Sie natürlich eine Hintergrundaufgabe starten, um all diese Kopien des Namens zu reparieren.

Ich würde auch den integrierten MongoDB-ID-Generator anstelle Ihres eigenen verwenden, er hat viele wünschenswerte Eigenschaften.