2011-01-24 6 views
3

문서 필드별로 CouchDB 내부 조인?

난 .comments 필드를 포함하는 문서를 내 보내야합니다. 이것은 PageType 문서 파일 이름 == PageCommentType 문서 refFilename 필드에 링크 된 PageCommentType 문서의 배열입니다.

{ 
    "filename": "demo", 
    "comments": [{}, {}, {}] 
} 

누구든지 그것을 구현하는 방법에 대한 제안이 있습니까?

고맙습니다.

답변

4

보기 데이터 정렬. ,

function(doc) { 
    if (doc.type == "PageType") emit([doc.filename,0],doc.content); 
    if (doc.type == "PageCommentType") emit[doc.refFilename,1],doc.content); 
} 

문서 demo을 찾고 그 의견 startkey=["demo",0]endkey=["demo",1]으로 쿼리를 실행 : 의견과 원본 콘텐츠 구별하기 위해 키와 filename 및 유형 식별자를 사용하여, 동일한보기에서 모두 방출 : 당신은 모든 코멘트가 뒤 따르는 페이지 내용을 얻을 것입니다. 당신은 모든 데이터 당신이 원하는,하지만 오른쪽 형식에없는, 당신은 거의 완료되면

. _list 함수를 작성하여 모든 행을 읽고 필요한 구조/스키마를 가진 최종 JSON 문서를 출력하십시오.

+0

두 번째 '방출'에 대해 'doc.comments'을 의미 했습니까? –

+0

이 두 행 결과는 내가 관리하지만, 찾고자하는 것이 아닙니다. 나는 집합의 문서가 배열 된 주석 속성을 갖는 집계 된 문서를 가지길 원했고, 이전 버전의 CouchDb에서는 map 함수 내에서 map을 호출하는 방법이 있었지만, 어쨌든 그것을 감쌀 수 있었지만, 그것이 지금 어떻게 작동하는지 알아 내려고 ... – Skitsanos

+0

때로는 "집계 된"소리가 들리면지도에서 축소하고보기를 줄이는 단서가됩니다. 안타깝게도, 데이터를 줄이기보다는 * 누적하기 때문에 여기에서 작업을 줄일 수는 없습니다. (즉, 축소 크기가 너무 크다는 오류가 발생합니다.) 빅터의 대답을 몇 가지 아이디어로 수정합니다. – JasonSmith