0

我对 MongoDB 完全陌生,正在考虑使用 JDO 作为不可知层将我的基本持久性代码(对于许多项目)转移到它。所以我是从一个喜欢以 bean 作为基本模型单元工作的 Java 开发人员的角度来问这个问题的。

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

家庭 - 人员集合

Person
 - name
 - address

Address
 - street
 - postcode

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

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

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

似乎如果确实如此,那么它就会误入关系领域,但是如果没有这样的引用,我会看到可怕的低效率出现吗?

4

2 回答 2

1

如果通过 JDO 持久化数据,您可以选择将 Person+Address 嵌入到 Household 中,或者作为单个对象持久化(就像使用 RDBMS 一样)。如果存储为非嵌入式存储,则取决于您是否拥有同一个人的多个副本,或者多个家庭引用的单个副本。如果存储为嵌入式,则它们是嵌入式的,因此是家庭的一部分,因此信息是重复的。

于 2014-01-07T15:56:24.620 回答
1

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

于 2014-01-07T15:55:46.040 回答