2012-02-24 40 views
1

我使用一個數據庫來存儲普通文檔,另一個數據庫只存儲附件。但我將附件標識存儲在普通文檔數據庫中。有沒有辦法如何執行像RDBMS這樣的兩個數據庫的連接操作。沙發DB加入類似RDBMS的操作

由於提前

回答

0

沒有辦法參加,但是你可以考慮存儲在同一個數據庫中的附件,或在其中引用它們的相同文件。

+0

引用它們的相同文檔。 – Mintu 2012-02-24 12:21:20

1

我知道這是可以做到連接數據庫中:

這裏有一個偉大的帖子:http://www.cmlenz.net/archives/2007/10/couchdb-joins

它的關鍵是,CouchDB的可訂購的JSON值,包括列表。

所以,讓我們把它從頂部... CouchDB的,你也知道,專賣店JSON文件。它使用映射函數來「發射」有序的鍵值對(這裏是來自couchdb權威指南的頁面:http://guide.couchdb.org/draft/views.html)那麼讓我們舉一個超級簡單的例子,然後我們需要一個複雜的'連接'。

這是一個地圖功能,通過每個文檔的數據庫去,檢查是否有文檔的作者,如果確實如此,顯示它的作者,它的後期。結果將是按鍵排序的「鍵值對」的列表,在本例中爲作者(按字母順序排列)。

function (doc) { 
    if (doc.author) { 
    emit(doc.author, doc.post); 
    } 
} 

現在我們複雜的例子。這個例子假設db將博客文章作爲json文檔,並將註釋作爲單獨的json文檔。這些評論有一個名爲'post'的關鍵字,其中包含他們所屬博客帖子的ID,就像mySQL中的外部id。

function(doc) { 
    if (doc.type == "post") { 
    emit([doc._id, 0], doc); 
    } else if (doc.type == "comment") { 
    emit([doc.post, 1], doc); 
    } 
} 

那到底是怎麼回事?所以,首先要注意的是'其他'部分。該功能實際上將博客文章和評論映射到相同的視圖(鍵值對的有序列表)。

「doc._id」是一個特殊的帖子的ID,而「doc.post」是一條評論屬於兩個帖子的ID。所以整個列表是按博客文章的ID排序的。

如果doc.type是「博客文章」它附加一個「0」的陣列來表示的話,和該文檔是一個「1」在「評論」。現在,這是魔術。文檔(帖子和評論)在一個鍵值對的列表中排序,但由於CouchDB可以排列數組,所以它將在一篇博客文章和下一篇博文之間滑動帶有'1'(註釋)的數組。合理?

哈哈,從我們已經習慣了這樣的不同,而這僅僅是一個創造性的解決方案。還有許多其他方法可以創建您可能需要的結果。希望這有幫助!