2017-10-16 182 views
0

正如許多地方所提到的,在MapReduce中以'sql-esque'方式加入數據是可能的,例如these Standford course notesthis MSc thesis以及http://ijniet.org:p。發佈的plagiarized copy of that thesis是否可以使用CouchDB視圖進行多路連接?

我有3個實體:

  1. A
  2. B
  3. C

AB可以ab柱接合,並且可以BCbc柱接合。我認爲,我可以通過級聯MapReduce任務來實現這一點。但是,我無法以任何方式在CouchDB中執行此操作,無論是使用Map函數,減少函數,列表函數(消耗MapReduce視圖)還是這些操作的組合...

在CouchDB中,您可以使用相同的連接鍵輸出不同實體的文檔。但據我所知,沒有可能的映射函數允許通過相同的鍵或鍵範圍對多個實體進行分組?

這是專門針對JOINS的,其中每個連接的外鍵列是不同的。

回答

1

您不能在CouchDB中進行級聯連接。

您可以做的唯一連接是一對多連接。

它由發射鏈接文檔作爲一種價值的視圖:

function(doc){ 
    emit([doc._id,0]); 
    emit([doc.ab,1],{_id:doc.ab}); 
} 

然後你用?include_docs=true

查詢,你會得到這樣的事情:

{rows:[ 
    {key:["my_main_doc_id",0],doc:{my main document...}}, 
    {key:["my_main_doc_id",1],doc:{child doc...}} 
]} 

看到這個documentation

+0

這看起來像你正在創建文檔本身的實體關係。您還可以通過使用相同的密鑰發出不同實體類型的文檔來近似連接,然後檢索分組映射索引。但是我意識到你不能在reduce函數中進行實際的連接,因爲你需要允許rereduce = true –

相關問題