1

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();   
4

1 に答える 1

0

属性の組み合わせを主キーとして使用することは確かに合理的です。ただし、それらを連結するよりも、_id として使用される 2 つのフィールド (uniqueStudentName と yyyymmdd) を持つサブドキュメントにそれらを配置する方が、おそらくより論理的に直感的です。

複合主キーの使用を含むこの質問を見てください。

MongoDB 複合キー

于 2012-09-21T17:49:52.330 に答える