"SQL join"과 동일한 CouchDB를 찾고 있습니다.CouchDB에서 일대 다 "JOIN"을 수행하는 가장 좋은 방법
이{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
목록을 정의하는 하나 개의 문서가있다 : 내 예에서
목록 요소 CouchDB를 문서가
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
당신은 세 번째 요소는, 그것을 삭제 볼 수 있듯이 더 이상 목록에 포함되지 않습니다. 따라서 결과의 일부가되어서는 안됩니다. 이제는 올바른 순서를 포함한 콘텐츠 요소를 반환하는보기가 필요합니다.
결과가 될 수있다 : 그것은이어야하는 요소의 순서가 이미이 경우
{ "content" : ["second", "first"] }
한다. 또 다른 가능한 결과 :
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
내가지도 기능을 쓰기 시작 : 이것은 지금까지 내가 얻을 수있다
map = function (doc) {
if (doc.type === 'el') {
emit(doc.id, {"content" : doc.content}); //emit the id and the content
exit;
}
if (doc.type === 'list') {
for (var i=0, l=doc.elements.length; i<l; ++i){
emit(doc.elements[i], { "order" : i }); //emit the id and the order
}
}
}
. 내 실수를 바로 잡고 감산 기능을 쓸 수 있습니까? 세 번째 문서는 결과의 일부가 아니어야 함을 기억하십시오.
물론 다른지도 기능을 작성할 수도 있습니다. 그러나 문서의 구조 (하나의 정의 요소 문서와 각 항목에 대한 입력 문서)는 변경할 수 없습니다.
편집 : 그는이 짧은 작업을 수행하는 방법에 대해 설명 그의 대답에 JasonSmith의 의견을 놓치지 마세요.
말씀이 철저한입니다. 좋은 직업 jhs! –
오해의 소지가 있습니다. 실제로 # 2 단계는 완벽한 솔루션입니다. 그렇지만 자세한 배경 요구 사항과 클라이언트 측에서 편리함을 추가 할 수있는 옵션이 있습니다. – JasonSmith
CouchIO URL이 변경되었습니다. 동일한 기사의 새 URL은 다음과 같습니다. http://couchio.tumblr.com/post/446015664/whats-new-in-apache-couchdb-011-part-two – Bdoserror