映射键以发出函数

Map keys to emit function

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

我只想拥有像 Ethik、Glaube 和 Wissen 这样的键,...而不是这些键的值。 我的实际地图函数如下所示:

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

输出例如:

[{"Bioethik": 1}]

现在我只想要 Bioethik 值,谁能告诉我如何访问它?我已经像往常一样尝试使用 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);
      }
    }
  }
}

这向我显示了正确的输出,但我认为这不是 for 循环的原因。在像这样的大学案例中,使用 foreach 循环迭代数组解决了这个问题,但我没有让他们工作。任何人都可以向我展示这个案例的 foreach 示例吗?