2011-11-23 3 views
3

시작하기 전에 SQL을 사용하지 마십시오. 이것은 더 큰 맥락에서 작은 문제이며 여기서는 관계형 데이터베이스를 사용하고 싶지 않으며 할 수 없다. 문제는 SQL에서 쉽게 해결할 수 있다는 것을 알고 있습니다.CouchDB MapReduce 관계형 데이터 쿼리

  • 선수
  • 스폰서

팀이 하나의 스폰서에 속하지만, 많은 선수가 있습니다

문서의 세 가지 유형이 있습니다. 플레이어는 여러 팀이 될 수 있으며 스폰서는 여러 팀을 가질 수 있습니다.

players: ["payer1","player2",...] 

지금 나는 모든 (별개 만 원하는 :

플레이어 (1) --- N 팀 N --- 1 스폰서

나는 배열의 팀 문서에 플레이어 문서 ID를 넣어 특정 선수의 이름 번) 후원 :

플레이어 1 : Sponsor1, Sponsor2, Sponsor3 ... 그것은 CouchDB Wiki에서 윈 예처럼 조금의

만의 그런데 팀 플레이어에는 여러 개의 키가 있습니다. 실제로 작동하지 않습니다.

은 내가 gist with example data.를 만들었습니다.

어떤 생각이 어떻게 결과를 얻을 수있는 맵리 듀스 함수를 작성하는?

내가 가진 가장 가까운, 그러나 쇼는 그룹 레벨 1에 여러 번, 후원 :

function(doc) { 
    if(doc.type == "team") 
    emit(doc.players,doc.sponsor); 
} 
function(keys, values) { 
    return (values); 
} 
+0

처럼 조회 할 수 있습니다? http://stackoverflow.com/questions/5511810/couchdb-view-equivalent-of-sum-group-by – ajreal

답변

4

현재,보기와 가까이가 약간 수정 :

"playerSponsers": { 
     "map": "function(doc) { 
       if(doc.type == "team" && doc.players) { 
        for (i in doc.players) { 
         emit([doc.players[i], doc.sponsor],1); 
        } 
       } 
       }", 
     "reduce": "_sum" 
    } 

을 그리고 여기입니다 질의 :

http://localhost:5984/test/_design/sports/_view/playerSponsors?group=true&group_level=2 

당신은 다음과 같은 결과를 얻을 것이다 :

당신이 한 선수에 대한 스폰서를 얻고 싶다면
{"rows":[ 
{"key":["Player1","Sponsor1"],"value":1}, 
{"key":["Player1","Sponsor2"],"value":1}, 
{"key":["Player1","Sponsor3"],"value":1}, 
{"key":["Player2","Sponsor1"],"value":1}, 
{"key":["Player2","Sponsor2"],"value":2}, 
{"key":["Player2","Sponsor3"],"value":1} 
]} 

, 당신은 도움이 될 수있는이

http://localhost:81/test/_design/sports/_view/playerSponsors?group=true&group_level=2&startkey=[%22Player1%22]&endkey=[%22Player1%22,{}] 
+0

대단히 감사합니다! – Patrick

관련 문제