I primi esperimenti con Spring Data e MongoDB sono stati grandiosi. Ora ho la seguente struttura (semplificato):Spring Data MongoDB: accesso e aggiornamento dei documenti secondari
public class Letter {
@Id
private String id;
private List<Section> sections;
}
public class Section {
private String id;
private String content;
}
Caricamento e salvataggio interi oggetti Lettera/documenti funziona come un fascino. (Io uso ObjectId di generare ID univoci per il campo Section.id.)
Letter letter1 = mongoTemplate.findById(id, Letter.class)
mongoTemplate.insert(letter2);
mongoTemplate.save(letter3);
Poiché i documenti sono grandi (200K) e, talvolta, solo sotto-parti sono necessari per l'applicazione: C'è la possibilità di interrogare per un sotto-documento (sezione), modificarlo e salvarlo? mi piacerebbe implementare un metodo come
Section s = findLetterSection(letterId, sectionId);
s.setText("blubb");
replaceLetterSection(letterId, sectionId, s);
E di metodi corso come:
addLetterSection(letterId, s); // add after last section
insertLetterSection(letterId, sectionId, s); // insert before given section
deleteLetterSection(letterId, sectionId); // delete given section
vedo che gli ultimi tre metodi sono un po ' "strano", vale a dire caricare l'intero documento, la modifica la raccolta e il salvataggio di nuovo possono essere l'approccio migliore da un punto di vista orientato agli oggetti; ma il primo caso d'uso ("navigare" verso un sotto-documento/sotto-oggetto e lavorare nell'ambito di questo oggetto) sembra naturale.
Penso che MongoDB possa aggiornare i documenti secondari, ma è possibile utilizzare SpringData per la mappatura degli oggetti? Grazie per qualsiasi suggerimento.
Puoi condividere il tuo metodo di metodo findSectionById()? –
Sono felice di condividerlo, è semplice, però - scorre semplicemente su sezioni della lettera e confronta il campo ID. Non abbiamo il codice esatto qui al momento. –