2011-08-24 57 views
2

假設我們有兩種類型的文檔。一個 - 存儲元數據,許多其他 - 具有複雜的處理,這取決於第一個文檔的狀態。我們不想複製第二種類型的所有文檔中的狀態,因爲它們很多。如何開發MAP函數以接收來自第一類文檔的數據。couchdb如何通過地圖功能中的id獲取文檔

{ "_id":"123", 
    "public":true 
} 
{ 
"_id":"321", 
"owner_id":"123" 
"data":"..." 
} 
function(doc) { 
    if (doc._id=="321"){ 
     // How do get another document like in python, for example 
     var doc2 = db[doc.owner_id]; 
     if (doc2.public) { 
      emit(doc._id, null); 
     } 
    } 
} 

回答

4

你可以這樣做;

function(doc) { 
    emit(doc._id, {"_id":doc.owner_id}); 
} 

然後,當你這樣做的關鍵= 321 & include_docs =真所包含的文檔將是一個與doc.owner_id不是321

這裏更多的ID: http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Linked_documents

+0

它如何幫助依賴於鏈接文檔中的數據的地圖功能,而不是它的ID? – AlikZao

+0

這不能在CouchDB中完成。地圖功能一次只能訪問一個文檔。 –

+0

如果每個索引記錄都需要知道索引觸及的每個其他文檔,那麼在相關文檔更改時可以更新索引,索引一致性將非常困難。雖然可取,但這將是非常昂貴的。 – Dustin

相關問題