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