Spring Boot 访问 MongoDB

Docker Compose 启动 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方式

Maven依赖:

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

配置:

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方式

实体:

@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);
}

常见问题排查

症状根因修复方法
启动连不上URI/端口/鉴权写错修正spring.data.mongodb.uri
Repo空指针实体无@Id/泛型不匹配补@Id,泛型对齐
查慢无索引/条件不命中加索引或改查询
事务失败单机非副本集改为副本集