2012-09-21 2 views
1

저는 스프링 데이터를 사용하여 pojos를 mongo json 문서에 매핑하고 있습니다.스프링 - 데이터 및 mongodb, 자연 대 인공 id 사용?

mongo 오브젝트 ID reference은 "문서에 자연스러운 기본 키가 있으면 변경할 수 없으므로 자동으로 생성 된 ID 대신 _id에 사용하는 것이 좋습니다."라고 말합니다. 내 질문은, 내 문서가 자연의 기본 키를 가지고 있지만 그것이 개체의 속성의 조합 인 경우 자연적인 기본 키를 만들기 위해 결합해야합니까?

값을 변경할 수 없다고 가정하고 함께 연결하면 결과가 고유 한 것으로 보장됩니다. 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 둘 다 String으로 나에게 주어집니다.

예를 들어 "20120601bobsmith"는 2012 년 6 월 1 일에 Bob Smith의 숙제를 고유하게 식별합니다. (Bob Smith가 둘 이상인 경우 이미 주어진 고유 이름에서 처리됩니다.)

mongo 참조 정보에 따라 자연 기본 키를 사용한다고 가정합니다. 하나는 있지만 2 개의 필드를 조합 한 것입니다. 내가 그렇게 그들을 결합해야하는 경우인가?

this.id = yyyymmdd + uniqueStudentName.toLowerCase(); 

답변

0

속성의 조합을 기본 키로 사용하는 것이 맞습니다. 그러나이를 연결하는 대신 _id로 사용되는 두 개의 필드 (uniqueStudentName 및 yyyymmdd)가있는 하위 문서에 배치하는 것이 논리적으로 직관적 일 수 있습니다.

은 복합 기본 키를 사용하는 것이 질문에서보세요 :

MongoDB Composite Key

+0

감사합니다! 나는 '합성 열쇠'를 찾기 위해 몰랐다. 그래서 나는 당신이 제공 한 질문을 놓쳤다. 궁극적으로, 나는 여분의 Java 클래스를 단지 ID로 사용한다고 생각하지만 몽고 사람들이 자연적인 기본 키를 사용하도록 제안했을 때 그 의미가 아닌 것 같다. unuqueStudentName과 yyyymmdd에 mongo가 지정한 ID와 고유 한 복합 색인을 사용하겠습니다. – rallison

관련 문제