Die Antwort darauf hängt wirklich davon ab, was Sie mit den Daten tun möchten, die Sie in Mongodb speichern. Es ist wichtig, daran zu denken, dass ein ReferenceField
zeigt auf ein Dokument in einer anderen Sammlung in mongodb, wohingegen ein EmbeddedDocument
wird im selben Dokument in derselben Sammlung gespeichert.
Betrachten Sie dieses Schema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Wenn Sie davon ausgehen, dass jede Person nur eine Adresse hat und jede Adresse nur mit einer Person verknüpft ist (eine Eins-zu-eins-Beziehung), und Sie im Allgemeinen die Datenbank nach einer oder mehreren Person
abfragen werden Dokumente, dann sollte das Feld Person.address EmbeddedDocumentField
sein .
Wenn Sie erwarten, dass jede Person mehr als eine Adresse hat, aber jede Adresse nur einer Person zugeordnet wird (eine Eins-zu-Viele-Beziehung) und Sie immer noch hauptsächlich nach einer Person suchen, dann können Sie ein EmbeddedDocumentListField .
Wenn Sie davon ausgehen, dass jede Person mehr als eine Adresse hat und jede Adresse mit vielen Personen verknüpft ist (eine Viele-zu-Viele-Beziehung), sollten Sie wahrscheinlich ReferenceField
verwenden .
Aber selbst wenn Sie Eins-zu-eins oder Eins-zu-viele sind, wenn die Adresse
Teil Ihres interessanten Datenmodells ist, kann es vorteilhaft sein, es in einer eigenen Sammlung zu speichern, da dies die Aggregation und Indizierung erleichtert.
Ein weiterer zu berücksichtigender Punkt ist, dass Sie es nicht drehen aus
mongoengine dereferenziert jedes ReferenceField
wenn Sie ein Dokument abrufen - dies kann zu Leistungseinbußen mit vielen ReferenceField
führen oder Verweise auf sehr große Dokumente.