MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoEngine :EmbeddedDocument contre/s. Champ de référence

La réponse à cela dépend vraiment de ce que vous avez l'intention de faire avec les données que vous stockez dans mongodb. Il est important de se rappeler qu'un ReferenceField pointera vers un document dans une autre collection dans mongodb, alors qu'un EmbeddedDocument est stocké dans le même document dans la même collection.

Considérez ce schéma :

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

Si vous vous attendez à ce que chaque personne n'ait qu'une seule adresse et que chaque adresse ne soit associée qu'à une seule personne (une relation un à un) et que vous allez généralement interroger la base de données pour une ou plusieurs Person documents, le champ Person.address doit être EmbeddedDocumentField .

Si vous vous attendez à ce que chaque personne ait plus d'une adresse, mais que chaque adresse ne soit associée qu'à une seule personne (une relation un à plusieurs) et que vous recherchiez toujours principalement une personne, vous pouvez utiliser un EmbeddedDocumentListField .

Si vous vous attendez à ce que chaque personne ait plus d'une adresse et que chaque adresse soit associée à de nombreuses personnes (une relation plusieurs à plusieurs), vous devriez probablement utiliser ReferenceField .

Cependant, même si vous êtes un à un ou un à plusieurs, si l'Address fait partie de votre modèle de données qui vous intéresse, il peut être avantageux de le stocker dans sa propre collection car cela facilite l'agrégation et l'indexation.

Un autre point à considérer est qu'à moins que vous l'activez désactivé mongoengine déréférencera chaque ReferenceField lorsque vous récupérez un document - cela peut introduire des pénalités de performance avec beaucoup de ReferenceField ou des références à des documents très volumineux.