当前位置: 首页 > 面试题库 >

MongoEngine:EmbeddedDocument v / s。ReferenceField

寿亦
2023-03-14
问题内容

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


问题答案:

答案实际上取决于打算如何处理存储在mongodb中的数据。重要的是要记住,aReferenceField将指向mongodb中另一个集合中的文档,而aEmbeddedDocument被存储在同一集合中的同一文档中。

考虑以下模式

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

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

如果您希望每个人都有一个以上的地址,但每个地址仅与一个人相关(一对多关系),而您仍然主要查询一个人,则可以使用EmbeddedDocumentListField

如果您希望每个人都有一个以上的地址,并且每个地址将与许多人相关联(多对多关系),则可能应该使用ReferenceField

但是,即使您是一对一或一对多的,如果Address您感兴趣的是数据模型的一部分,那么将其存储在自己的集合中可能也会有好处,因为它使聚合和建立索引更加容易。

需要考虑的另一点是,除非您将其关闭,否则mongoengine将ReferenceField在检索文档时取消对每个文档的引用-
这可能会引入大量ReferenceField或引用非常大的文档而导致性能下降。



 类似资料:
  • s

    描述 (Description) 这不是一个功能。 这是正则表达式替换运算符。 根据PATTERN中指定的正则表达式,数据将替换为REPLACE。 与m //一样,分隔符由s后面的第一个字符定义。 语法 (Syntax) 以下是此函数的简单语法 - s/PATTERN/REPLACE/ 返回值 (Return Value) 此函数在失败时返回0,并在成功时返回替换次数。 例子 (Example)

  • \S

    描述 (Description) 字符类\S匹配任何非空白字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo {

  • \s

    描述 (Description) 字符类\s匹配任何空格字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo { p

  • 问题内容: 在我上大学的这个Java项目中,我遇到一种情况,当前正在使用 其中msgs是一个链接的阻止队列,通过 但是,我想使用一个ObjectInputStream和一个ObjectOutputStream。我已经在构造函数中初始化了它们,并在构造它后刷新了ObjectOutputStream,我读到某个地方必须这样做。 我想同时发送Strings和另一个Object类型,通过网络将其称为gam

  • The Stress Terminal UI: s-tui Stress-Terminal UI, s-tui, monitors CPU temperature, frequency, power and utilization in a graphical way from the terminal. Screenshot Table of Contents The Stress Termin

  • _ _ _____ | | | |/ ____|| | __ _ _ __ __ ___ _____| | (___ | | / _` | '__/ _` \ \ / / _ \ |\___ \ | |___| (_| | | | (_| |\ V / __/

  • 引言 MVC时代:在MVC模型里,更关注的Model的不变,业务需求通常是Model不变,同时有多个对Model的不同显示,即View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。 MVP时代:在MVP里,Presenter完全把Model和Vie

  • s-json 是 Symbian 平台上用来解析 JSON 数据的 C++ 类库。