2014-07-14 3 views
0

CouchDB에는 사용자 및 음악이라는 두 가지 유형의 문서가 있습니다. 각 사용자는 자신의 프로파일에 음악 유형을 추가 할 수 있습니다. 문서의 구조는 다음과 같습니다M-N 관계에 대한 CouchDB에서 쿼리를 작성하는 방법은 무엇입니까?

User { uid: ... , type: 'user', name: ...., surname: ....}; 

Music {mid: ..., type: 'music', genre: 'rock'}; 

User_Music { uid: ... , mid: ....}; 

나는이 문서에 가입 할 수있는 쿼리를 만들고 싶어은 ... 어떻게 CouchDB를에 있다고 할 수 있습니까?

답변

0

관계형 데이터베이스에서와 같이 서버에서 단일 쿼리로 문서를 조인 할 수 없습니다. 그러나 거의 동일한 결과를 얻을 수 있도록 사용자와 음악을 순서대로 정렬하는보기를 만들 수 있습니다. 그러나 모든 문서에는 공통 키 필드가 있어야합니다. 귀하의 예에서, 귀하는 귀하의 문서 유형 중 두 가지만 의사 (pseudo) 조인 할 수 있습니다. 다음보기

User_Music {umid: ..., type: 'usermusic', uid: ... , mid: ....}; 

:

{ 
    "map":function(doc) { 
     if (doc.type == 'user') { 
      emit([doc._id, 0], doc); 
     } else if (doc.type == 'usermusic') { 
      emit([doc.uid, 1, mid], doc); 
     } 
    } 
} 

가 USER_ID으로 분류 음악 ID의 목록을 반환됩니다

유형을 포함하도록 가입 문서를 수정 방법은 다음과 같습니다. 시작 키와 종료 키 (예 : startkey "["user1 "]"및 endkey "["user1 ", {}]")를 전달하여 개별 사용자의보기를 쿼리하여 user1의 음악 목록을 가져온 다음 반복합니다 반환 된 각 music_id에 대한 결과 및 쿼리 음악 문서.

관련 문제