Spring Boot集成MongoDB核心三步:加spring-boot-starter-data-mongodb依赖、用URI配置连接(含认证与连接池参数)、用@Document和@Id定义实体并结合MongoRepository与MongoTemplate操作数据,需注意版本兼容、LocalDateTime序列化及索引配置。

Spring Boot 集成 MongoDB 很直接,核心就三步:加依赖、配连接、写代码。不复杂但容易忽略细节,比如版本兼容、字段映射和连接池设置。
添加 starter 依赖
在 pom.xml 中引入官方 starter,无需手动管理驱动版本:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
这个依赖自动带入 spring-data-mongodb 和同步驱动,够日常使用。如果要用响应式编程,再加 spring-boot-starter-data-mongodb-reactive。
配置数据库连接
推荐用 URI 方式 配置,更清晰且支持认证、连接池等高级参数:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 无密码本地连接:
spring.data.mongodb.uri=mongodb://localhost:27017/myapp - 带用户名密码(注意
authSource):spring.data.mongodb.uri=mongodb://admin:pass@localhost:27017/myapp?authSource=admin - 生产环境建议显式调优连接池:
spring.data.mongodb.uri=...&maxPoolSize=50&minPoolSize=10&maxConnectionLifeTime=0
避免混用 host/port/database 和 uri,后者优先级更高,混用会导致配置被忽略。
定义实体与数据访问层
实体类用 @Document 标注,主键用 @Id(默认映射到 _id 字段):
-
@Document(collection = "users")明确指定集合名 -
@Id private String id;—— 若不赋值,MongoDB 自动创建 ObjectId - 日期字段推荐用
Instant或LocalDateTime(需配置序列化器,否则存成嵌套对象)
数据操作推荐双模式配合使用:
-
MongoRepository:适合标准 CRUD,方法命名即查询,如
findByEmailAndStatus(String email, String status) - MongoTemplate:适合动态条件、聚合、批量更新、自定义查询等场景
注意几个高频坑
刚上手容易卡在这几处:
- 版本错配:Spring Boot 2.7.x 对应 Spring Data MongoDB 3.x,对应 MongoDB 4.4–6.x;升到 Boot 3.x 要确认 MongoDB 服务端 ≥6.0,且改用 Jakarta EE 包名
-
LocalDateTime 存储异常:默认会转成嵌套文档,需注册
JacksonMongoConverters.getMongoConverter()或自定义MappingMongoConverter -
索引没建:查询慢别急着优化代码,先检查关键字段是否建了索引,用
@Indexed注解或 shell 手动建 -
事务支持:仅副本集或分片集群可用,单节点不支持;开启事务需用
withTransaction()+MongoTemplate

















