EmbeddedDocument
允许将一个文档存储在另一个文档中,而RefereneField
只存储它的引用。但是,他们正在实现一个类似的目标。他们有特定的用例吗?
PS:
已经有一个question了,但是没有好的答案。
最佳答案
这个问题的答案实际上取决于您打算如何处理mongodb中存储的数据。必须记住,aReferenceField
将指向mongodb中另一个集合中的文档,而aEmbeddedDocument
则存储在同一集合中的同一个文档中。
请考虑此架构:
Person
-> name
-> address
Address
-> street
-> city
-> country
如果您希望每个人只有一个地址,并且每个地址只与一个人关联(一对一关系),并且您通常要查询数据库中的一个或多个
Person
文档,那么person.address字段应该是EmbeddedDocumentField
。如果您希望每个人都有多个地址,但每个地址只与一个人(一对多关系)关联,并且您仍将主要查询一个人,则可以使用
EmbeddedDocumentListField
。如果您希望每个人都有一个以上的地址,并且每个地址将与许多人(多对多关系)关联,那么您可能应该使用
ReferenceField
。然而,即使您是一对一或一对多,如果
Address
是您感兴趣的数据模型的一部分,那么将它存储在自己的集合中可能是有利的,因为它使聚合和索引更容易。另一个需要考虑的问题是,除非在检索文档时MongoEngine将对每个
ReferenceField
都取消引用,否则这可能会导致大量ReferenceField
或对非常大的文档的引用带来性能损失。关于python - MongoEngine:EmbeddedDocument v/s。 ReferenceField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34897566/