Spring Data MongoDB (Optional)
Introduction
Spring Data MongoDB maps Java objects to BSON documents with @Document, MongoRepository, and declarative queries—similar to JPA for relational databases. This optional chapter gives a thin Spring Boot 3 example and links to the main Spring Boot track for everything outside MongoDB.
Prerequisites
- Spring Boot 3 introduction
- BSON and Document Basics
- Data Modeling
- JDK 17+, Maven or Gradle
Dependency
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>application.yml:
spring:
data:
mongodb:
uri: mongodb://127.0.0.1:27017/hello_demoAtlas: use mongodb+srv://... — MongoDB Atlas.
Document Model
Post.java:
Code explanation:
@Idmaps to_id(String accepts ObjectId hex or lets MongoDB generate)@Indexed(unique = true)creates index at startup (or use explicit index definitions)
Repository
PostRepository.java:
Spring generates query implementations from method names—like JPA findBy....
REST Controller Sketch
Compare Spring Boot MVC and routing.
Custom Queries With @Query
@Query("{ 'tags': ?0, 'published': true }")
List<Post> findPublishedByTag(String tag);JSON in @Query mirrors mongosh filters — Query Operators.
Transactions
Enable replica set, then:
@Transactional
public void transferInventory(String fromSku, String toSku, int qty) {
// multiple MongoTemplate / repository calls in one transaction
}@Transactional requires MongoDB 4.0+ replica set — Transactions chapter. Contrast MySQL transactions.
Embedded vs Referenced in Java
Embed value objects:
public class Comment {
private String author;
private String body;
private Instant createdAt;
}
// inside Post
private List<Comment> comments;Reference by id when comments grow unbounded — Embedded vs Referenced.
Warning
Do not embed unbounded comments on viral posts—use a separate Comment @Document with postId.
Testing
Use Testcontainers MongoDBContainer or embedded Mongo for CI—see generated tests in First Spring Boot Project.
FAQ
Spring Data MongoDB vs MySQL JPA?
Same Spring patterns; MongoDB skips JOINs—model for your queries. Relational reporting often stays on MySQL.
Redis caching?
@Cacheable with Redis — Spring Boot Redis and Performance.
Kotlin?
Spring Data MongoDB works with Kotlin data classes—add kotlin-reflect.
Migration tool?
Mongock or application scripts; no Flyway-style SQL. Use schemaVersion field in documents — Common Modeling Patterns.
Security?
SCRAM users, TLS, input validation — MongoDB Security.