2014-09-05 80 views
1

我有三個類型的文檔:CouchDB三重加入?

  1. 問題
  2. 用戶 - 包含源字段
  3. 解答 - 包含相應的問題ID和用戶ID

每個問題是由多個回答用戶和每個用戶只回答每個問題一次。我想爲每個問題找到源「source1」的用戶回答了多少個答案。

回答

2

我認爲你可以達到你想要的更接近的是(使用Linked documents)。

假設你有

{ "_id": "user1", "source": "source1" }, 
{ "_id": "user2", "source": "source2" }, 
{ "_id": "answer1", "question": "question1", "user": "user1" }, 
{ "_id": "answer2", "question": "question1", "user": "user2" } 

,並定義了以下觀點

function(doc) { 
    if (doc.question) { 
    emit(doc.question, {_id: doc.user}); 
    } 
} 

然後,如果你查詢與關鍵=「問題1」,並與include_docs =真 它會告訴你所有的觀點對所有用戶信息的question1的答案,你只需要選擇source =「source1」的那些。

例如,與前值,則回覆:

{"total_rows":2,"offset":0,"rows":[ 
{"id":"answer1","key":"question1","value":{"_id":"user1"},"doc":{"_id":"user1","_rev":"1-c99dc8987841c25c72081a84252793a0","source":"source1"}}, 
{"id":"answer2","key":"question1","value":{"_id":"user2"},"doc":{"_id":"user2","_rev":"1-0d44e9f4d3806fb932b1b4fcb1e1507b","source":"source2"}} 
]} 

但據我所知,你不能在視圖中的地圖功能做的是使用來自其他文檔的信息。

+0

我該怎麼辦include_docs =在蒲團界面真的嗎? – Bob 2014-09-05 13:05:26

+1

你不能...你可以做的是用蒲團顯示你的視圖,然後按下「原始視圖」圖標(在右上角),並添加&include_docs = true到網址 – DaniCE 2014-09-05 14:14:53

0

你無法在couchdb中實現此功能,並且需要使用第三方模塊。

例如一個:

sites.google.com/site/nosqldatajoiner/

或谷歌的NoSQL促使DataJoiner