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

MongoEngine:EmbeddedDocument v/s. Referenzfeld

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.