sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoEngine:documento integrado v/s. Campo de referencia

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.