Svaret på detta beror verkligen på vad du tänker göra med den data du lagrar i mongodb. Det är viktigt att komma ihåg att ett ReferenceField
pekar på ett dokument i en annan samling i mongodb, medan ett EmbeddedDocument
lagras i samma dokument i samma samling.
Tänk på det här schemat:
Person
-> name
-> address
Address
-> street
-> city
-> country
Om du förväntar dig att varje person bara ska ha en adress och att varje adress bara ska vara associerad med en person (en en-till-en-relation) och du i allmänhet kommer att fråga databasen efter en eller flera Person
dokument ska fältet Person.address vara EmbeddedDocumentField
.
Om du förväntar dig att varje person ska ha mer än en adress men varje adress bara kommer att vara kopplad till en person (en en-till-många-relation) och du fortfarande huvudsakligen kommer att fråga efter en person så kan du använda ett EmbeddedDocumentListField .
Om du förväntar dig att varje person ska ha mer än en adress och varje adress kommer att associeras med många personer (en många-till-många-relation) bör du förmodligen använda ReferenceField
.
Men även om du är en-till-en eller en-till-många, om Adress
är en del av din datamodell som är av intresse så kan det vara fördelaktigt att ha den lagrad i sin egen samling eftersom det gör aggregering och indexering enklare.
En annan punkt att tänka på är att om du inte vänder det av
mongoengine kommer att avreferera varje ReferenceField
när du hämtar ett dokument - detta kan leda till prestationspåföljder med massor av ReferenceField
eller referenser till mycket stora dokument.