Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB是否使用相同的数据复制子文档?_Java_Mongodb_Orm_Jdo_Subdocument - Fatal编程技术网

Java MongoDB是否使用相同的数据复制子文档?

Java MongoDB是否使用相同的数据复制子文档?,java,mongodb,orm,jdo,subdocument,Java,Mongodb,Orm,Jdo,Subdocument,我是MongoDB的新手,正在考虑使用JDO作为不可知层将我的基本持久性代码(对于许多项目)转移到MongoDB上。因此,我从一个喜欢使用bean作为基本模型单元的java开发人员的角度提出这个问题 我的问题是关于子文档以及它们是独立存在还是由MongoDB内部合并。i、 e.如果我有这样的域结构: 住户-人员集合 Person - name - address Address - street - postcode 如果我有一个家庭的文件,它将有多个人,但每个人都有相同的地址 每个

我是MongoDB的新手,正在考虑使用JDO作为不可知层将我的基本持久性代码(对于许多项目)转移到MongoDB上。因此,我从一个喜欢使用bean作为基本模型单元的java开发人员的角度提出这个问题

我的问题是关于子文档以及它们是独立存在还是由MongoDB内部合并。i、 e.如果我有这样的域结构:

住户-人员集合

Person
 - name
 - address

Address
 - street
 - postcode
如果我有一个家庭的文件,它将有多个人,但每个人都有相同的地址

每个地址在MongoDB中是否都是一个独立的实体(即使它们是相同的“类”并且具有相同的值。或者Mongo是否以某种方式标识它们引用的是相同的实体并在内部为每个地址存储一个UID

更重要的是,如果我更新了一个地址的邮政编码,这是否意味着每个家庭成员的地址子文档都会反映这一变化


如果它这样做了,那么它似乎就进入了关系领域,但如果没有这种引用,我可以看到出现了可怕的低效率?

Mongo不会为您消除这些子文档的重复数据,不会。如果您想规范化这些数据,您需要将这些地址保存到不同的集合中(理想情况下)并在保存随附文档时将DBREF存储到这些文档中。使用morphia或spring data之类的工具可以帮助您管理这些引用。

如果通过JDO持久化数据,您可以选择将Person+地址嵌入家庭,或作为单个对象持久化(就像使用RDBMS一样)。如果存储为非嵌入式,则取决于您是否拥有同一个人的多个副本,或多个家庭引用的单个副本。如果存储为嵌入式,则这些副本将被嵌入,从而成为家庭的一部分,从而复制信息