2010-09-28 47 views
0

我想在couchdb中創建一個動態視圖,並且我想問如何在沙發視圖中訪問參數鍵。 像如下:視圖中的訪問鍵參數

function(doc) { 
    if ((doc['couchrest-type'] == 'User') && ((doc['email'] != null) || (doc['login'] != null))) { 
     if (doc['email'] == parameter[key]) { 
      emit(doc['email'], doc); 
     } else if (doc['login'] == parameter[key]) { 
      emit(doc['login'], doc); 
     } 
    } 
} 

,什麼是CouchDB中動態視圖的缺點。 以及如何在Couchrest模型中添加這樣的動態視圖。

感謝, Shenouda博特

回答

2

您不能創建在CouchDB的動態視圖。你可能使用臨時視圖(請參閱this page的底部)做你在這裏要做的事情,但臨時視圖臭名昭着地必須貫穿整個數據庫來計算結果,所以你將會有非常可怕的性能並且每個CouchDB資源都會對此提出建議。

視圖對於回答諸如「哪些數據與此值匹配?」等問題很有用。或「給我按這個值排序的數據」。它們針對這樣做進行了優化,因爲map和reduce函數不依賴查詢參數,因此可以緩存和增量更新。

你想要做的是「什麼數據匹配這個值?」樣,所以可以用一個靜態的,永久的觀點做:

function(doc) { 
    if (doc.type == 'User') { 
     if (doc.email) emit(doc.email, null); 
     if (doc.login) emit(doc.login, null); 
    } 
} 

此視圖,可以查詢該有一個電子郵件或登錄等於某個值的任何文件,所以你會簡單地用key正在運行一個查詢您正在查找的電子郵件/登錄名