2015-06-06 172 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)函数,可以帮助你一点点调试。 –