MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s. Campo di riferimento

La risposta a questo dipende davvero da cosa intendi fare con i dati che stai archiviando in mongodb. È importante ricordare che un ReferenceField punterà a un documento in un'altra raccolta in mongodb, mentre un EmbeddedDocument è archiviato nello stesso documento nella stessa raccolta.

Considera questo schema:

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

Se prevedi che ogni persona abbia un solo indirizzo e che ogni indirizzo sia associato a una sola persona (una relazione uno-a-uno) e generalmente interrogherai il database per una o più Person documenti, quindi il campo Person.address dovrebbe essere EmbeddedDocumentField .

Se prevedi che ogni persona abbia più di un indirizzo, ma ogni indirizzo sarà associato a una sola persona (una relazione uno-a-molti) e continuerai a interrogare principalmente una Persona, puoi utilizzare un EmbeddedDocumentListField .

Se ti aspetti che ogni persona abbia più di un indirizzo e ogni indirizzo sarà associato a molte persone (una relazione molti-a-molti), probabilmente dovresti usare ReferenceField .

Tuttavia, anche se sei uno a uno o uno a molti, se l'Address fa parte del tuo modello di dati che è di interesse, quindi potrebbe essere vantaggioso averlo archiviato nella propria raccolta perché semplifica l'aggregazione e l'indicizzazione.

Un altro punto da considerare è che, a meno che tu non lo giri spento mongoengine de-reference ogni ReferenceField quando recuperi un documento, ciò potrebbe introdurre penalità di prestazioni con molti ReferenceField o riferimenti a documenti molto grandi.