项目场景
在使用 Spring Data MongoDB 进行开发时,定义了一个名为 CompetitionSignUpLog 的实体类,并创建了对应的 Repository 接口。需要明确该实体类在 MongoDB 中实际对应的集合名称是 CompetitionSignUpLog 还是 competitionSignUpLog。
问题描述
不确定 MongoDB 中自动生成的集合名称是基于实体类名称的哪种大小写形式:
CompetitionSignUpLog(首字母大写)competitionSignUpLog(首字母小写)
这会影响直接通过 MongoDB shell 或其他客户端工具查询数据时的集合名称使用。
原因分析
Spring Data MongoDB 默认的集合名称生成规则如下:
- 常规情况:将类名的第一个字母转换为小写 
- 例如:
CompetitionSignUpLog→competitionSignUpLog 
 - 例如:
 - 特殊情况:如果类名的前两个字母都是大写,则保持原样 
- 例如:
COMPETITIONSignUpLog→COMPETITIONSignUpLog 
 - 例如:
 
对于 CompetitionSignUpLog 类:
- 首字母 
C是大写,第二个字母o是小写 - 因此会应用常规规则,转换为首字母小写形式 
competitionSignUpLog 
解决方案
方案1:查看实际集合名称
直接连接到 MongoDB 数据库,查看自动生成的集合名称:
use your_database_name;
show collections;
 
方案2:显式指定集合名称
在实体类上添加 @Document 注解明确指定集合名称:
import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "competitionSignUpLog") // 明确指定集合名称
public class CompetitionSignUpLog {// ... 类定义
}
 
最佳实践建议
推荐使用 @Document 显式指定集合名称,避免依赖默认规则
保持命名一致性:
Java 类名:CompetitionSignUpLog(首字母大写)
集合名称:competitionSignUpLog(首字母小写)
在 Repository 中无需关心实际集合名称,Spring Data 会自动处理映射关系