2017-03-31 3 views
0

나는 Mongodb를 처음 사용하고 MySQL을 사용했습니다. 학습 단계에서 LinkedIn과 같은 사용자 프로필을 만들려고합니다. mongodb 스키마에서 일대 다 관계를 만드는 올바른 방법을 선택하는 것은 혼란 스럽습니다.사용자 프로필에 대한 몽구스 스키마, 1 대 많은 속성을 가진

컨텍스트 : 사용자는 여러 교육 자격과 경험을 가질 수 있습니다. 내가 두 번째 테스트하지 않았습니다

var userSchema = new mongoose.Schema({ 
    name: { 
    first: String, 
    middle: String, 
    last: String, 
    }, 
    gender: { type: Number, max: 3, min: 0, default: GENDERS.Unspecified }, 
    age: Number, 
    education: [{type: String, detail: { 
    major: String, 
    degree: String, 
    grade: String, 
    startdate: Date, 
    enddate: Date, 
    remarks: String 
    }}], 
    experience: [{type: String, detail: { 
    position: String, 
    company: String, 
    dateofjoin: String, 
    dateofretire: String, 
    location: String, 
    responsibilities: [{type:String}], 
    description: String, 
    }}], 
    email: String 
}); 

:

예 1 :

var userSchema = new mongoose.Schema({ 
    name: { 
    first: String, 
    middle: String, 
    last: String, 
    }, 
    gender: { type: Number, max: 3, min: 0, default: GENDERS.Unspecified }, 
    age: Number, 
    education: [{type: Schema.Types.ObjectId, ref:'Education'}], 
    experience: [{type: Schema.Types.ObjectId, ref:'Experience'}], 
    email: String 
}); 

예 2 다음 두 가지 방법으로 내가 같이 스키마를 만들려고하는 것이이다 선택권.

데이터를 가져 오거나 추가하기 위해 쿼리를 작성하는 동안 어느 것이 더 쉽고 간편합니까? 그런 시나리오를위한 스키마를 작성하는 더 좋은 방법이 있습니까?

답변

0

이 예제에서는 문서를 참조로 저장하는 것이 좋습니다. 여기에 그 이유가 나와 있습니다.

일반적으로 mongodb 스키마 디자인의 첫 번째 단계는 데이터를 쿼리하는 방법을 고려하는 것입니다.

사용자의 교육적 배경을 알고 싶습니까, 아니면 특정 교육 배경을 가진 모든 사용자를 알고 싶습니까? 이러한 유형의 질문에 대한 대답을 얻으면 데이터베이스를 어떻게 설정할지 결정하게됩니다.

사용자를 이미 알고있는 경우 해당 문서에 교육 배경이 포함되어 있으면 빠르고 쉽게 액세스 할 수 있습니다. 별도의 쿼리가 필요하지 않으며 스키마가 여전히 지나치게 복잡하지 않으며 이해하기 어렵지 않습니다. 이것이 내가 당신이 데이터에 접근하기를 원할 것이라고 기대하는 방법입니다.

이제 특정 교육 배경을 가진 모든 사용자를 찾으려면 삽입 된 문서 스키마에 큰 단점이 분명히 있습니다. 이 경우 먼저 각 사용자를 살펴보고 다양한 교육을보기 위해 교육 배열을 반복해야합니다.

데이터에 대한 예상 검색어에 따라 답변이 달라질 수 있지만이 경우 (모든 사용자에 대해보고하지 않는 한) 임베디드가 가능합니다.

또한 도움이 토론을 찾을 수

:

MongoDB relationships: embed or reference?