A resposta para isso realmente depende do que pretende fazer com os dados que você está armazenando no mongodb. É importante lembrar que um
ReferenceField
apontará para um documento em outra coleção no mongodb, enquanto um EmbeddedDocument
é armazenado no mesmo documento na mesma coleção. Considere este esquema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Se você espera que cada pessoa tenha apenas um endereço e cada endereço seja associado apenas a uma pessoa (um relacionamento um-para-um) e você geralmente consulta o banco de dados para uma ou mais
Person
documentos, o campo Person.address deve ser EmbeddedDocumentField
. Se você espera que cada pessoa tenha mais de um endereço, mas cada endereço só será associado a uma pessoa (um relacionamento um-para-muitos) e você ainda consultará principalmente uma pessoa, poderá usar um
EmbeddedDocumentListField .
Se você espera que cada pessoa tenha mais de um endereço e cada endereço será associado a muitas pessoas (um relacionamento muitos-para-muitos), você provavelmente deve usar ReferenceField
.
No entanto, mesmo se você for um para um ou um para muitos, se o Endereço
faz parte do seu modelo de dados que é de interesse, então pode ser vantajoso tê-lo armazenado em sua própria coleção, pois facilita a agregação e a indexação.
Um outro ponto a considerar é que, a menos que você transforme-o desligado
mongoengine irá desreferenciar cada ReferenceField
quando você recupera um documento - isso pode introduzir penalidades de desempenho com muitos ReferenceField
ou referências a documentos muito grandes.