/ / MongoDBは同じデータを持つサブドキュメントを複製しますか? -java、mongodb、orm、jdo、サブドキュメント

MongoDBはサブ文書を同じデータで複製しますか? - java、mongodb、orm、jdo、subdocument

私は「MongoDBを初めて使用し、JDOを不可知論者層として使用して、(多くのプロジェクトの)ベースの永続化コードをそれに移動します。ですから、基本的なモデルユニットとしてBeanを使用するのが好きなJava開発者の観点からこの質問をしています。

私の質問は、サブドキュメントと、それらが独立して存在するか、MongoDBによって内部的に統合されるかについてです。つまり、次のようなドメイン構造があった場合:

世帯-人のコレクション

Person
- name
- address

Address
- street
- postcode

世帯のドキュメントがある場合、複数のPersonがありますが、各Personには同じ住所があります。

各アドレスは別個の別個のものですかMongoDB内のエンティティ(それらは同じ「クラス」で同じ値を持ちますが、Mongoは同じエンティティを参照していることを何らかの方法で識別し、各アドレスのUIDを内部的に格納しますか?

さらに重要なことには。 1つの住所の郵便番号を更新すると、世帯の住所サブドキュメントのすべてのメンバーがその変更を反映することになりますか?

もしそうなら、それは関係の領域に迷い込んでいるように思えますが、そのような参照なしでは恐ろしい非効率が生じるのを見ることができますか?

回答:

回答№1は1

JDOを介してデータを永続化する場合、次の選択肢があります。Person + AddressをHouseholdに埋め込むか、個別のオブジェクトとして永続化します(RDBMSで行うように)。非埋め込みとして保存する場合は、同じ人物のコピーが複数あるか、複数の世帯が参照する単一のコピーがあるかはユーザー次第です。埋め込みとして保存する場合は埋め込みであるため、世帯の一部であるため、情報はdupdです。


回答№2の場合は0

Mongoはこれらのサブドキュメントを重複排除しませんあなた、いや。そのデータを正規化する場合は、それらのアドレスを(理想的には)別のコレクションに保存し、囲んでいるドキュメントを保存するときに、それらのドキュメントにDBRefを保存する必要があります。あなたのために。