2011-03-11 51 views
3

是否可以從相關文檔中獲取加載值並將它們作爲鍵/值的一部分與CouchDb中當前文檔的值一起發出?如何在CouchDb的地圖功能中訪問相關文檔?

實施例:

{Id: 1, Type: Entity, Name: US, Code: 001} 
{Id: 2, Type: Entity, Name: Alaska, Code: AL, Parent_Id: 1} 
{Id: 3, Type: Entity, Name: California, Code: CAL, Parent_Id: 1} 
{Id: 4, Type: Entity, Name: Juneau, Code: C-JUN, Parent_Id: 2} 

我會希望從父實體和當前實體同時讀取的代碼,名稱等,併發射它們作爲在地圖功能的鍵/值。如果父母有另一位家長,我也想從中讀取數據。 (鏈接走在其他數據庫)

回答

6

在地圖降低,如果你emit()在它的_id的對象,則該ID將是當你與?include_docs=true查詢你的文件。

因此,如果地圖上加州運行時,它會做emit(key, {_id: doc.Parent_id, entity: doc})

如果查詢與?include_docs=true來看,每一行都會有value.entity有關加州的文件,也是一個doc值與的文檔我們。

兩個限制:

  1. 您可以爲每個查詢只查詢1級深以這種方式。
  2. 使用的include_docs技巧,你必須知道該鏈接的文檔的_id當你emit()

這裏的另一個選項是view collation,所有相關或類似的文件被髮出,使他們在所有ajacent視圖。 (通常你會發出一個文檔的id和所有孩子的parent_Id的關鍵字,所以它們全都屬於視圖中的同一個關鍵字

+0

我們正在存儲分層數據,我知道我可以存儲整個路徑,然後發送它的關鍵,但我們也有層次結構,如組織結構圖經常改變,更新所有相關文檔中的路徑可能是一個問題,你會建議使用圖形分貝代替在這種情況下, – 2011-03-12 07:08:19

+0

是的,我忘了提到一個圖形數據庫是一種可能性,CouchDB非常棒,但它基本上不是一個圖形數據庫,如果你有很多圖形數據,可能值得一試。 – JasonSmith 2011-03-13 06:04:01

相關問題