La respuesta a esto realmente depende de lo que pretenda hacer con los datos que está almacenando en mongodb. Es importante recordar que un ReferenceField
apuntará a un documento en otra colección en mongodb, mientras que un EmbeddedDocument
se almacena en el mismo documento en la misma colección.
Considere este esquema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Si espera que cada persona tenga solo una dirección y que cada dirección solo esté asociada con una persona (una relación de uno a uno) y generalmente va a consultar la base de datos para una o más Person
documentos, entonces el campo Person.address debe ser EmbeddedDocumentField
.
Si espera que cada persona tenga más de una dirección, pero cada dirección solo se asociará a una persona (una relación de uno a muchos) y seguirá consultando principalmente a una Persona, entonces puede usar un EmbeddedDocumentListField
.
Si espera que cada persona tenga más de una dirección y cada dirección se asociará con muchas personas (una relación de muchos a muchos), probablemente debería usar ReferenceField
.
Sin embargo, incluso si es uno a uno o uno a muchos, si la Address
es parte de su modelo de datos que es de interés, entonces puede ser ventajoso tenerlo almacenado en su propia colección porque facilita la agregación y la indexación.
Otro punto a considerar es que, a menos que lo convierta apagado
mongoengine eliminará la referencia de cada ReferenceField
cuando recupera un documento:esto podría introducir penalizaciones de rendimiento con muchos ReferenceField
o referencias a documentos muy extensos.