映射键以发出功能

时间:2015-06-06 14:30:16

标签: javascript object mapreduce couchdb nosql

我在couchDB中有一个对象,看起来好像是几个数组,我是couchDB的新手,我不知道如何访问它的密钥。该文件如下:

DROP TRIGGER IF EXISTS `update_todo`;
CREATE TRIGGER `update_todo` AFTER DELETE ON `user_todo_send` FOR EACH ROW
BEGIN
    UPDATE `todo`
        SET status = 1
        WHERE id = OLD.id_todo
END;

我只想拥有像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的价值,有人能告诉我如何访问它吗?我已经像往常一样使用JS Arrays尝试了.keys(),我也尝试在使用keys()之前执行JSON.encode,但在这种情况下没有输出。我认为这只是一个微不足道的答案,因为我不知道语法...

问候 埃里克

2 个答案:

答案 0 :(得分: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);
      }
    }
  }
}

这显示了相关输出,但我认为它不是非常漂亮的for循环。在大学这样的案例用foreach循环解决了迭代数组,但我没有得到它们的工作。有人能告诉我一个关于这个案子的例子吗?

答案 1 :(得分: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}
]}