2012-08-24 2 views
0

이것은 내게 이런 시간까지 깨어있게했습니다. DB에서 축구 토너먼트를 추적하고 싶습니다. 각 경기에는 홈과 어웨이의 두 팀이 있습니다. 각 팀은 많은 경기가 본거지가 될 수 있습니다.축구 및 CouchDb (SQL과 조인을위한 멍청한 놈)

나는 "match"(home : teamId와 away : teamId 포함)와 team (teamId, teamName 등 포함)의 두 가지 문서 유형을 가지고있다.

필자는 작업 뷰를 작성했지만 각 팀에 관련된 모든 일치 항목의 ID를 추가하는 것을 의미합니다. 논리적 인 의미는 없습니다. 이러한 해킹입니다.

이보기를 작성하는 방법에 대한 아이디어가 있습니까? 나는 거의 스폰지를 던지고 대신 포스트 그레스를 사용하고 싶다.

편집 : 내가 원했던 것은 경기의 이드가 주어 졌을 때 홈팀과 원정 경기 모두 팀 정보를 얻는 것입니다. 두 번의 전화로는 매우 쉽지만 두 번 전화하고 싶지는 않습니다.

답변

1

그냥 같이 각 경기 map에서 두 값을 방출 :

function (doc) { 
    if (!doc.home || !doc.away) return; 
    emit([doc._id, "home"], { _id: doc.home }); 
    emit([doc._id, "away"], { _id: doc.away }); 
} 

와 경기 아이디 MATCHID에 대한 뷰를 쿼리 후 :

curl 'http://localhost:5984/yourdb/_design/yourpp/_view/yourview?startkey=\["MATCHID"\]&endkey=\["MATCHID",\{\}\]&include_docs=true' 

당신이 두 팀 '을 얻을 수 있어야합니다 결과 목록에있는 doc의 문서 (row) (가능하면 아래처럼) :

(210)
+0

Marcin - 아직 시도하지는 않았지만 솔루션이 실행 가능해 보입니다. –

+0

사실 - 귀하의 솔루션이 옳았습니다. 나는 startkey/endkey 파트를 만들 수는 없지만 couchdb에있는 그런 멍청한 녀석일지도 모른다. 아마도 나는 사소한 일을 잘못하고있을 것이다. 기능 (문서) { \t 경우 (doc.recordType == '일치') { \t \t 발광 (doc._id, { '_id': doc.home}) 내보기는 다음과 같다; \t \t emit (doc._id, { '_id': doc.away}); \t \t emit (doc._id, { '_id': doc._id}); 와는'= 키 "matchIdHere"을 통해 심문을 할 수 \t} 은}' 와우, 당신에게 많은 감사합니다, 그것은 큰 구호 관리 : –

+0

물론, = 사실 include_docs을 사용했다고합니다. –

0

확인 CouchDB를 예약 : http://guide.couchdb.org/editions/1/en/why.html

그것은 무료이며 당신이 그것을 좋아한다면 초보자 :

에 대한 답변을 포함, 그것을 구입을 고려. 크리스와 얀이 너무 굉장하다고 생각할지라도 그들은 무료로 책을 집어 넣었고, 책으로 한 위대한 작품을 여전히지지해야합니다.

관련 문제