Spring-data を使用して、pojos を mongo json ドキュメントにマップしています。
mongo Object Idリファレンスには、「ドキュメントに不変の自然な主キーがある場合は、自動生成された ID の代わりに _id でそれを使用することをお勧めします」と書かれています。私の質問は、ドキュメントに自然な主キーがあり、それがオブジェクトの属性の組み合わせである場合、それらを組み合わせて自然な主キーを作成する必要があるかどうかです。
どちらの値も変更できず、連結すると結果が一意であることが保証されると仮定します。id に対して宣言する型が何であれ、Spring はそれを ObjectId に変換することに注意してください (その型のコンバーターがない場合は、文字列に変換します)。
次に例を示します。
@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
}
宿題は、生徒 1 人につき 1 日 1 つまでです。yyyymmdd と uniqueStudentName の両方が文字列として与えられます。
たとえば、「20120601bobsmith」は、2012 年 6 月 1 日の Bob Smith の宿題を一意に識別します (複数の Bob Smith がいる場合は、与えられた uniqueName で既に処理されています)。
mongo 参照のアドバイスに従い、自然な主キーがあればそれを使用したいとします。1つですが、2つのフィールドの組み合わせです。このように組み合わせればいいのでしょうか。
this.id = yyyymmdd + uniqueStudentName.toLowerCase();