SpringDataとMongoDBを使った最初の実験は素晴らしかった。これで、次の構造(簡略化)が得られました。
public class Letter {
@Id
private String id;
private List<Section> sections;
}
public class Section {
private String id;
private String content;
}
Letterオブジェクト/ドキュメント全体のロードと保存は魅力のように機能します。(ObjectIdを使用して、Section.idフィールドの一意のIDを生成します。)
Letter letter1 = mongoTemplate.findById(id, Letter.class)
mongoTemplate.insert(letter2);
mongoTemplate.save(letter3);
ドキュメントは大きく(200K)、アプリケーションで必要なのはサブパーツのみである場合があります。サブドキュメント(セクション)を照会し、変更して保存する可能性はありますか?次のようなメソッドを実装したい
Section s = findLetterSection(letterId, sectionId);
s.setText("blubb");
replaceLetterSection(letterId, sectionId, s);
そしてもちろん、次のような方法もあります。
addLetterSection(letterId, s); // add after last section
insertLetterSection(letterId, sectionId, s); // insert before given section
deleteLetterSection(letterId, sectionId); // delete given section
最後の3つの方法はやや「奇妙」であることがわかります。つまり、ドキュメント全体をロードし、コレクションを変更して再度保存する方が、オブジェクト指向の観点からはより良いアプローチかもしれません。しかし、最初のユースケース(サブドキュメント/サブオブジェクトに「ナビゲート」し、このオブジェクトのスコープで作業する)は自然なようです。
MongoDBはサブドキュメントを更新できると思いますが、SpringDataをオブジェクトマッピングに使用できますか?ポインタをありがとう。