编程语言
首页 > 编程语言> > python – MongoEngine:EmbeddedDocument v / s. ReferenceField

python – MongoEngine:EmbeddedDocument v / s. ReferenceField

作者:互联网

EmbeddedDocument允许将文档存储在另一个文档中,而RefereneField只存储它的引用.但是,他们实现了类似的目标.他们有特定的用例吗?

PS:
SO上已有question,但没有好的答案.

解决方法:

这个问题的答案实际上取决于你想要在mongodb中存储的数据.重要的是要记住,ReferenceField将指向mongodb中另一个集合中的文档,而EmbeddedDocument存储在同一集合中的同一文档中.

考虑这个架构:

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

如果您希望每个人只有一个地址,并且每个地址只与一个人(一对一的关系)相关联,并且您通常会在数据库中查询一个或多个Person文档,那么Person.address字段应该是EmbeddedDocumentField.

如果您希望每个人都有多个地址,但每个地址只与一个人关联(一对多关系),您仍然主要查询一个人,那么您可以使用EmbeddedDocumentListField.

如果您希望每个人都有多个地址,并且每个地址都与许多人(多对多关系)相关联,那么您可能应该使用ReferenceField.

但是,即使您是一对一或一对多,如果地址是您感兴趣的数据模型的一部分,那么将它存储在它自己的集合中可能是有利的,因为它会进行聚合和索引更轻松.

另外需要考虑的一点是,除非您在检索文档时turn it off mongoengine将取消引用每个ReferenceField,否则可能会引入大量ReferenceField或对非常大的文档的引用的性能损失.

标签:mongoengine,python,mongodb
来源: https://codeday.me/bug/20190927/1824916.html