Spring Boot Access to MongoDB

Docker Compose Start MongoDB

services:
  mongo:
    image: mongo:7
    ports:
      - "37017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin123
    volumes:
      - mongo_data:/data/db

Template Approach

Maven dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

Configuration:

spring:
  data:
    mongodb:
      uri: mongodb://admin:admin123@localhost:37017/wzk_test?authSource=admin

DAO:

@Autowired
private MongoTemplate mongoTemplate;

public List<WzkDocument> findAdults() {
    Query q = new Query(Criteria.where("age").gte(18));
    return mongo.find(q, WzkDocument.class);
}

Repository Approach

Entity:

@Document("wzk_document")
public class WzkDocument {
    @Id
    private String id;

    @Indexed
    private String name;
    private Integer age;
}

Repository:

public interface WzkDocumentRepo extends MongoRepository<WzkDocument, String> {
    WzkDocument findByName(String name);
}

Common Problem Troubleshooting

SymptomRoot CauseFix
Cannot connect at startupURI/port/auth incorrectCorrect spring.data.mongodb.uri
Repo null pointerEntity missing @Id/generic mismatchAdd @Id, align generics
Slow queryNo index/condition not hitting indexAdd index or modify query
Transaction failureSingle machine not replica setChange to replica set