2015-06-06 240 views
1

我已經在couchDB中有一個對象,在這看起來像幾個陣列,即時通訊新的couchDB,我不知道如何訪問它的鍵。該文件看起來是這樣的:映射鍵發射功能

{ 
    "_id": "113232", 
    "_rev": "1-c967a81c0eccba6a7c92e3c4b352d4eb", 
    "name": "Ezequiel Campion", 
    "vorlesungen": [ 
     { 
      "Ethik": 1.7 
     }, 
     { 
      "Glaube und Wissen": 5 
     }, 
     { 
      "Logik": 1.7 
     }, 
     { 
      "Bioethik": 1.7 
     }, 
     { 
      "Erkenntnistheorie": 1 
     }, 
     { 
      "Grundzuege": 4 
     }, 
     { 
      "Der Wiener Kreis": 1.7 
     } 
    ] 
} 

我只是想有鑰匙像倫理學,Glaube UND WISSEN,......不是值這個鍵。 我的實際地圖功能看起來是這樣的:

function(doc) { 
    emit(doc.vorlesungen, null); 
    } 

輸出例如:

[{"Bioethik": 1}] 

現在我只想Bioethik價值,任何人都可以告訴我如何訪問呢?我已經嘗試使用.keys()像JS Array一樣平常,我也試圖在使用keys()之前執行JSON.encode,但在這種情況下沒有輸出。我認爲這將只是一個微不足道的答案,因爲我不知道語法...

問候 埃裏克

回答

1

長期測試後,我已經找到了解決我的問題,當我得到:

function(doc) { 
    var vorl; 
    if(doc.vorlesungen){ 
    for(i=0;i<doc.vorlesungen.length;i++){ 
     for(vorl in doc.vorlesungen[i]){ 
     emit(vorl, 1); 
     } 
    } 
    } 
} 

這說明我corret輸出,但我認爲這不是for循環的原因。在大學這樣的情況下,用foreach循環來迭代數組,但我沒有得到他們的工作。請問任何人都可以向我展示這種情況的例子嗎?

+1

與@Akshat Jiwan Sharma之前呈現的解決方案是不是一樣?只是與傳統 - 非功能 - 數組迭代 –

+0

我試過了@Akshat Jiwan Sharma的版本,但它沒有給我一個輸出,我不知道爲什麼... – elanfer

+0

@elanfer沒問題:)無論什麼作品爲你。 –

0

這是你在找什麼?

function(doc){ 
    doc.vorlesungen.forEach(function(item){ 
     if(typeof(item) === "object"){ 
      var keys = Object.keys(item); 
     keys.forEach(function(key){emit(key)}) 
     } 
    }); 
} 

代碼遍歷數組doc.vorlesungen。如果該項目是一個對象,它將獲取該對象的所有鍵。然後對於這樣獲得的每個關鍵碼發出它。

這是結果運行視圖

{"total_rows":7,"offset":0,"rows":[ 
{"id":"113232","key":"Bioethik","value":null}, 
{"id":"113232","key":"Der Wiener Kreis","value":null}, 
{"id":"113232","key":"Erkenntnistheorie","value":null}, 
{"id":"113232","key":"Ethik","value":null}, 
{"id":"113232","key":"Glaube und Wissen","value":null}, 
{"id":"113232","key":"Grundzuege","value":null}, 
{"id":"113232","key":"Logik","value":null} 
]} 
+0

感謝您的回答,但此代碼不給我任何輸出,我在couchdb(v1.3.0)的蒲團web界面上執行它。是否有任何方法來解決在這個界面中的腳本? – elanfer

+0

有一個[日誌()](http://docs.couchdb.org/en/latest/query-server/javascript.html?highlight=log#log)函數,可以幫助你一點點調試。 –