Spring Data MongoDB examples demonstrating the same TechMart e-commerce scenarios using Spring Boot patterns.
This module provides Spring Boot + Spring Data MongoDB implementations of the TechMart examples, demonstrating:
- POJO Mapping -
@Document,@Id,@Indexedannotations - Repositories - Derived queries,
@Query,@Aggregation - MongoTemplate - Complex queries, aggregations, change streams
- Transactions -
@Transactionalwith MongoDB - Validation - Bean Validation (JSR-380) with MongoDB
- Security - Encryption concepts with POJOs
- Atlas Features - Search and Vector Search integration
| # | Example | Spring Data Features |
|---|---|---|
| E01 | Document Model | @Document, @Id, @Indexed, POJO mapping |
| E02 | Flexible Schema | Map<String, Object> for dynamic attributes |
| E03 | CRUD Operations | Repository methods, derived queries |
| E04 | Index Types | @Indexed, @CompoundIndex, @TextIndexed, indexOps() |
| E05 | Aggregation | @Aggregation, MongoTemplate, fluent API |
| E06 | Transactions | @Transactional, MongoTransactionManager |
| E07 | Change Streams | MongoTemplate.watch(), real-time notifications |
| E08 | Materialized Views | $merge aggregation, pre-computed analytics |
| E09 | Schema Validation | Bean Validation, @Valid, @NotBlank, @Email, @Pattern |
| E12 | Queryable Encryption | Conceptual demo with encrypted POJOs |
| E13 | Client-Side FLE | Per-customer keys, crypto-shredding for GDPR |
| E10 | Time Series | IoT sensors, time bucketing, TTL, aggregation |
| E14 | Atlas Search | Full-text, fuzzy, autocomplete with MongoTemplate |
| E15 | Vector Search | AI/semantic search, RAG, Spring AI integration |
| E16 | Replica Set | Read preferences, write concerns, workload isolation |
- Java 17+
- Maven 3.6+
- MongoDB 7.0+ (local or Atlas)
# From project root
cd spring-boot-examples
# Show available examples menu
mvn spring-boot:run
# Run a specific example
mvn spring-boot:run -Dspring-boot.run.arguments="--example=E01"
# Run multiple examples (space-separated)
mvn spring-boot:run -Dspring-boot.run.arguments="--example=E01 --example=E03"
# Run ALL examples sequentially
mvn spring-boot:run -Dspring-boot.run.arguments="--example=ALL"
# Or from parent directory
mvn spring-boot:run -pl spring-boot-examples -Dspring-boot.run.arguments="--example=E05"Set MongoDB connection in application.yml or via environment:
export MONGODB_URI="mongodb://localhost:27017"
export MONGODB_DATABASE="techmart"spring-boot-examples/
├── pom.xml
├── src/main/java/com/mongodb/examples/springboot/
│ ├── TechMartApplication.java # Main entry point
│ ├── config/
│ │ └── MongoConfig.java # Transaction config
│ ├── model/ # Document classes (POJOs)
│ │ ├── Product.java
│ │ ├── Customer.java
│ │ ├── Order.java
│ │ ├── Inventory.java
│ │ ├── ValidatedCustomer.java # Bean Validation demo
│ │ ├── EncryptedCustomer.java # Encryption demo
│ │ ├── CsfleCustomer.java # CSFLE demo
│ │ └── SearchProduct.java # Atlas Search/Vector demo
│ ├── repository/ # Spring Data repositories
│ │ └── ...Repository.java
│ ├── service/
│ │ └── OrderService.java # Transaction example
│ └── examples/ # Runnable examples
│ ├── ExampleMenu.java # Shows available examples
│ ├── E01_DocumentModelExample.java
│ ├── E02_FlexibleSchemaExample.java
│ ├── ...
│ ├── E14_AtlasSearchExample.java
│ └── E15_VectorSearchExample.java
└── src/main/resources/
└── application.yml
| Feature | Native Driver | Spring Data MongoDB |
|---|---|---|
| Document creation | new Document().append() |
POJOs with @Document |
| CRUD operations | collection.insertOne() |
repository.save() |
| Queries | Filters.eq() |
findBy...() methods |
| Indexes | collection.createIndex() |
@Indexed, @CompoundIndex |
| Aggregation | collection.aggregate() |
@Aggregation, MongoTemplate |
| Transactions | ClientSession |
@Transactional |
| Change Streams | collection.watch() |
MongoTemplate.watch() |
| Validation | MongoDB JSON Schema | Bean Validation (JSR-380) |
| Atlas Search | $search stage |
MongoTemplate + Document |
| Vector Search | $vectorSearch stage |
MongoTemplate + Spring AI |
// Collection mapping
@Document(collection = "products")
public class Product {
@Id
private String id;
@Indexed(unique = true)
private String sku;
@TextIndexed
private String name;
@CompoundIndex(name = "cat_price", def = "{'category': 1, 'price': -1}")
}
// Bean Validation
@Document(collection = "customers")
public class ValidatedCustomer {
@NotBlank(message = "Email is required")
@Email(message = "Must be valid email")
private String email;
@Min(18) @Max(120)
private Integer age;
@Valid // Validates nested objects
private Address address;
}
// Vector Search embedding
@Document(collection = "products_search")
public class SearchProduct {
private String name;
private String description;
private List<Double> embedding; // AI-generated vector
}- Spring Data MongoDB Reference
- MongoDB Java Driver Docs
- Spring Boot MongoDB Guide
- Bean Validation (JSR-380)
- Spring AI - For embedding generation