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,泛型对齐 |
| 查慢 | 无索引/条件不命中 | 加索引或改查询 |
| 事务失败 | 单机非副本集 | 改为副本集 |