Svaret på dette afhænger virkelig af, hvad du agter at gøre med de data, du gemmer i mongodb. Det er vigtigt at huske, at et ReferenceField
vil pege på et dokument i en anden samling i mongodb, hvorimod et EmbeddedDocument
er gemt i det samme dokument i samme samling.
Overvej dette skema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Hvis du forventer, at hver person kun har én adresse, og at hver adresse kun er knyttet til én person (et en-til-en-forhold), og du generelt vil forespørge databasen for en eller flere Personer
dokumenter, skal feltet Person.address være EmbeddedDocumentField
.
Hvis du forventer, at hver person har mere end én adresse, men hver adresse kun vil være knyttet til én person (et en-til-mange-forhold), og du stadig primært vil forespørge efter en person, kan du bruge et EmbeddedDocumentListField .
Hvis du forventer, at hver person har mere end én adresse, og hver adresse vil være forbundet med mange personer (et mange-til-mange forhold), bør du sandsynligvis bruge ReferenceField
.
Men selvom du er en-til-en eller en-til-mange, hvis Adresse
er en del af din datamodel, som er af interesse, så kan det være en fordel at have det gemt i sin egen samling, fordi det gør aggregering og indeksering nemmere.
Et andet punkt at overveje er, at medmindre du vender det slukket
mongoengine vil de-reference hvert ReferenceField
når du henter et dokument - kan dette indføre ydeevnestraffe med masser af ReferenceField
eller henvisninger til meget store dokumenter.