2012-08-24 22 views
0

這讓我一直保持清醒,直到凌晨。 我想要一個db來跟蹤足球比賽。 每場比賽有兩隊,主場和客場。每個球隊都可以成爲家中或許多比賽的客場。我有一個數據庫,和兩個文檔類型,「匹配」(包含:家:teamId和客場:teamId)和團隊(包含:teamId,teamName等)。足球和CouchDb(noob pining爲sql和連接)

我已經設法編寫了一個工作視圖,但它意味着要向每個團隊添加所涉及的每個匹配的ID,這並沒有太大的邏輯意義 - 這是如此的黑客攻擊。

關於如何寫這個視圖的任何想法?我幾乎試圖把海綿扔進去並使用postgres。

編輯:我想要的是讓球隊的信息爲主場和客場球隊,鑑於比賽的編號。兩次打電話很容易,但我不想打兩次電話。

回答

1

剛剛發出的map兩個值每場比賽這樣的:

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

與查詢視圖的比賽ID MATCHID後:

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

,你應該能夠得到兩個隊doc文件中的結果列表(row),可能如下:

{"total_rows":2,"offset":0,"rows":[ 
{"id":"MATCHID","key":["MATCHID","home"],"value":{"_id":"first_team_id"},"doc":{...full doc of the first team...}}, 
{"id":"MATCHID","key":["MATCHID","away"],"value":{"_id":"second_team_id"},"doc":{...full doc of the second team...}} 
]} 
+0

謝謝Marcin - 我還沒有嘗試過,但它看起來像你的解決方案是可行的。 –

+0

的確 - 您的解決方案是正確的。我沒有設法使startkey/endkey部分工作,但我在couchdb中是一個很不錯的選擇,可能我做的事情很瑣碎。我的視圖看起來像這樣: 函數(DOC){ \t如果(doc.recordType == '匹配'){ \t \t EMIT(doc._id,{ '_id':doc.home}); \t \t emit(doc._id,{'_id':doc.away}); \t \t emit(doc._id,{'_id':doc._id}); \t}} 並且可以通過'鍵=「matchIdHere」被詢問' 哇,謝謝了很多,這是一個很大的救濟已成功:) –

+0

和使用過程中的include_docs = TRUE。 –

0

檢查CouchDB的書:http://guide.couchdb.org/editions/1/en/why.html

它是免費的,包括回答初學者:)

如果你喜歡的話,可以考慮購買它。即使認爲克里斯和詹如此棒,他們只是把自己的書放在那裏免費,你仍然應該支持他們在書中做的偉大工作。