我正在使用 Spring-data 将 pojos 映射到 mongo json 文档。
mongo Object Id参考说“如果您的文档具有不可变的自然主键,我们建议您在 _id 中使用它而不是自动生成的 ids。” 我的问题是,如果我的文档有一个自然主键,但它是对象属性的某种组合,我应该将它们组合起来创建自然主键吗?
假设这两个值都不能改变,并且当连接在一起时,结果保证是唯一的。请注意,无论您为 id 声明什么类型,Spring 都会将其转换为 ObjectId(除非他们没有该类型的转换器,否则他们会将其转换为 String)。
这是一个例子:
@Document
public Class HomeworkAssignment {
@Id
private String id;
private final String yyyymmdd;
private final String uniqueStudentName;
private double homeworkGrade;
public HomeworkAssignment(String yyyymmdd, String uniqueStudentName) {
this.yyyymmdd = yyyymmdd;
this.uniqueStudentName = uniqueStudentName;
// can either set the 'id' here, or let Spring give me an artificial one.
}
// setter provided for the homeworkGrade
}
保证每个学生每天不超过一份家庭作业。yyyymmdd 和 uniqueStudentName 都作为字符串提供给我。
例如,“20120601bobsmith”唯一标识了 Bob Smith 2012 年 6 月 1 日的作业。(如果有多个 Bob Smith,则已经在我给定的 uniqueName 中处理了)。
假设我想遵循 mongo 参考建议并使用自然主键(如果有)。有一个,但它是 2 个字段的组合。这是我应该像这样组合它们的情况吗?
this.id = yyyymmdd + uniqueStudentName.toLowerCase();