Spring Data MongoDB für Dokumentmodelle
Spring Data MongoDB integriert MongoDB über Template, Repository und Mapping-Abstraktionen in Spring-Anwendungen.
Fachliche Einordnung
MongoDB passt zu dokumentorientierten Aggregaten, flexiblen Schemas und read-optimierten Strukturen. Es ist kein Ersatz für jede relationale Transaktion.
Enterprise-Merksatz: Spring Data MongoDB integriert MongoDB über Template, Repository und Mapping-Abstraktionen in Spring-Anwendungen.
Technische Darstellung
Kernkonzepte
- Document statt Entity-Tabelle.
- MongoTemplate für kontrollierte Queries und Updates.
- Repository für einfache Dokumentzugriffe.
- Indexes und TTL bewusst definieren.
- Change Streams für reaktive oder eventnahe Szenarien.
Wann einsetzen?
- Du speicherst fachliche Dokumente oder Snapshots.
- Du brauchst flexible Attribute pro Mandant oder Produkt.
- Du willst schnelle Reads auf bereits aggregierten Daten.
Typische Fehler und Risiken
- Mongo als Ablage für unklare relationale Modelle missbrauchen.
- Ohne Indexstrategie produktiv gehen.
- Dokumente grenzenlos wachsen lassen.
Legacy- und Modernisierungssicht
Alte Berichtstabellen oder XML/JSON-Payload-Archive können als dokumentorientierte Read Models neu aufgebaut werden.
Ausführliches Beispiel
Das Beispiel zeigt bewusst nicht nur Annotationen, sondern auch die Verantwortung der Schicht. In echten Projekten sollte der technische Spring-Code an Adapter- oder Konfigurationsrändern bleiben, während die Fachlogik testbar und möglichst frameworkarm bleibt.
@Document("customer_profile")
class CustomerProfileDocument {
@Id String id;
String customerNumber;
Map<String, Object> preferences;
Instant updatedAt;
}
interface CustomerProfileRepository extends MongoRepository<CustomerProfileDocument, String> {
Optional<CustomerProfileDocument> findByCustomerNumber(String customerNumber);
}
@Service
class CustomerProfileProjectionUpdater {
void apply(CustomerChanged event) {
Query query = Query.query(Criteria.where("customerNumber").is(event.customerNumber()));
Update update = new Update().set("preferences", event.preferences()).currentDate("updatedAt");
mongoTemplate.upsert(query, update, CustomerProfileDocument.class);
}
}
Checkliste für Reviews
- Ist die Verantwortung des Bausteins klar: Framework steuert Lebenszyklus, Library wird gezielt benutzt?
- Ist die Fachlogik außerhalb von Controller, Listener, Repository-Implementierung oder Konfiguration?
- Sind Fehlerfälle, Timeouts, Security, Monitoring und Tests sichtbar modelliert?
- Gibt es klare Grenzen zwischen DTO, Domäne, Persistence und Infrastruktur?