Ich versuche, eine gute Dokumentstruktur zu schaffen, die gute Leseleistungen und nicht so langsam Schreibleistungen hat. Ich muss Informationen über ein UserConnection-Dokument speichern, das die Verbindung zwischen zwei Benutzern in meiner Datenbank darstellt. Jeder Link hat eine Gewichtung, die von einer Liste von Parametern abhängt. Was ist die bessere mongodb Dokumentstruktur?
Das folgende ist ein Schema, das die Daten, die Links und Gewichte Komponenten darstellt:
UserConnection Services Components
UserA Name Name
UserB Weight Weight
Weight Components
Services
UserConnection.Weight = sum(UserConnection.Services.Weight)
UserConnection.Services.Weight = sum(UserConnection.Services.Weight.Components)
Ich bin derzeit Mongoengine in Django. Ich habe versucht, eine Struktur mit EmbeddedDocument und EmbeddedDocumentListField zu definieren, aber ich bin nicht glücklich darüber.
Ich füge meine Tests der Kürze halber nicht hinzu.
Kann mir bitte jemand helfen, eine gute Struktur für MongDB zu finden?
Vielen Dank.
Danke Steve für Ihre Antwort. Ich habe andere Frage darüber: 1. warum Sie ReferenceField und nicht EmbeddedDocument für Service Collection verwendet? 2. Ich muss die Summe speichern und nicht jedes Mal neu berechnen, wenn ich auf die Daten zugreife. Möglicherweise kann das Feldgewicht in Service mit einem pre_save-Signal gefüllt werden, um die Summe nur dann zu berechnen, wenn eine Komponente hinzugefügt/geändert/entfernt wird. Was denkst du darüber? –
Da EmbeddedDocuments nicht in einer eigenen Sammlung gespeichert sind, sondern in der übergeordneten Dokumentensammlung gespeichert sind. Wenn Dokumente in einer Sammlung vorhanden sind, kann die Abfrage und Indizierung ein wenig einfacher sein, wenn viele Elemente vorhanden sind. Ich stimme den Signalen als die richtige Wahl zu, ich werde die Antwort bearbeiten, um diese Vorgehensweise ebenfalls zu zeigen. –
Nochmals vielen Dank Steve! Es wäre schön, ein Signal zu haben, das auch in update mit upsert verwendet werden kann. –