Pierwsze eksperymenty z Spring Data i MongoDB były świetne. Teraz mam następującą strukturę (uproszczoną):Dane źródłowe MongoDB: dostęp do dokumentów podrzędnych i ich aktualizacja
public class Letter {
@Id
private String id;
private List<Section> sections;
}
public class Section {
private String id;
private String content;
}
Ładowanie i zapisywanie całych obiektów/dokumentów listowych działa jak czar. (Używam objectID do generowania unikalnych identyfikatorów dla pola Section.id.)
Letter letter1 = mongoTemplate.findById(id, Letter.class)
mongoTemplate.insert(letter2);
mongoTemplate.save(letter3);
jako dokumenty są duże (200K), a czasem tylko sub-części są potrzebne do wniosku: Czy istnieje możliwość kwerendy dla pod-dokument (sekcja), modyfikować i zapisywać? Chciałbym zaimplementować metodę jak
Section s = findLetterSection(letterId, sectionId);
s.setText("blubb");
replaceLetterSection(letterId, sectionId, s);
I oczywiście metod, takich jak:
addLetterSection(letterId, s); // add after last section
insertLetterSection(letterId, sectionId, s); // insert before given section
deleteLetterSection(letterId, sectionId); // delete given section
widzę, że ostatnie trzy metody są nieco „dziwne”, czyli załadowaniu całego dokumentu, modyfikując zbieranie i zapisywanie go ponownie może być lepszym podejściem z punktu widzenia obiektowego; ale pierwszy przypadek użycia ("nawigacja" do pod-dokumentu/pod-obiektu i praca w zakresie tego obiektu) wydaje się naturalny.
Myślę, że MongoDB może aktualizować pod-dokumenty, ale czy SpringData może być używany do mapowania obiektów? Dzięki za wszelkie wskazówki.
Czy możesz udostępnić swoją metodę findSectionById()? –
Cieszę się, że mogę je udostępnić, ale jest to proste - po prostu pętle przechodzi przez sekcje i porównuje pole ID. W tej chwili nie ma tu dokładnego kodu. –