Javascript 映射关键点以发射函数

Javascript 映射关键点以发射函数,javascript,object,mapreduce,couchdb,nosql,Javascript,Object,Mapreduce,Couchdb,Nosql,我在couchDB中有一个对象,在这里看起来有几个数组,我是couchDB的新手,我不知道如何访问它的密钥。该文档如下所示: { "_id": "113232", "_rev": "1-c967a81c0eccba6a7c92e3c4b352d4eb", "name": "Ezequiel Campion", "vorlesungen": [ { "Ethik": 1.7 }, { "G

我在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
       }
   ]
}
function(doc) {
    emit(doc.vorlesungen, null);
  }
我只想要像Ethik,Glaube和Wissen这样的钥匙,。。。不是此键的值。 我的实际映射函数如下所示:

{
   "_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
       }
   ]
}
function(doc) {
    emit(doc.vorlesungen, null);
  }
例如,输出为:

[{"Bioethik": 1}]
现在我只想要生物伦理的价值,有人能告诉我如何获得它吗?我已经像往常一样在JS数组中尝试过.keys(),我也尝试过在使用keys()之前执行JSON.encode,但在这种情况下没有输出。我认为这只是一个微不足道的答案,因为我不知道语法

问候
埃里克这就是你要找的吗

 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}
]}

经过长期测试,我找到了解决问题的方法:

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

对于(i=0;我想知道您的答案,但这段代码没有给我任何输出,我正在futon webinterface for couchdb(v1.3.0)上执行它。有什么方法可以解决这个界面中的脚本问题吗?有一个函数可以帮你调试一下。它和之前介绍的@Akshat Jiwan Sharma的解决方案不一样吗?只是用传统的-非函数-数组迭代我试过@Akshat Jiwan Sharma的版本,但它没有给我输出,我不知道是什么为什么。。。