我要寻找一个映射/降低函数来计算在一个设计文件的状态。 下面你可以从我的当前数据库查看示例文件。

{
   "_id": "0238f1414f2f95a47266ca43709a6591",
   "_rev": "22-24a741981b4de71f33cc70c7e5744442",
   "status": "retrieved image urls",
   "term": "Lucas Winter",
   "urls": [
       {
           "status": "retrieved",
            "url": "http://...."
       },
       {
           "status": "retrieved",
            "url": "http://..."
       }
   ],
   "search_depth": 1,
   "possible_labels": {
       "gender": "male"
    },
    "couchrest-type": "SearchTerm"
}

我想摆脱status关键的和而从URL的状态计算。 我的当前by_status视图看起来如下:

function(doc) {
    if (doc['status']) {
       emit(doc['status'], null);
    }
}

我尝试了一些东西,但没有任何实际工作。现在我Map Function看起来是这样的:

function(doc) {
    if(doc.urls){
        emit(doc._id, doc.urls)
    }
}

和我的Reduce Function

function(key, value, rereduce){ 
    var reduced_status = "retrieved"
    for(var url in value){
        if(url.status=="new"){
            reduced_status = "new";
        }
    }
    return reduced_status;
}

结果是我得到检索到处是绝对不正确的。

我试图缩小问题,它似乎是value没有阵列中,当我使用下面Reduce Function我得到长度1无处不在,这是不可能的,因为我在我的数据库12页中的文件,20之间各自含有至200个网址

function(key, value, rereduce){ 
   return value.length;
}

替代文字http://img.skitch.com/20100316-qeawxgd5pru8d5i6bprygcsmhf.jpg

我在做什么错了? (我知道我要你写的代码,我和我感到内疚,但现在我的状态的计算红宝石从数据库中获取数据后,这将是很好的获得已经从正确的数据数据库)

其他提示

doc.urls似乎是含有Object特性和status属性urls数组。所以,你的Reduce函数应该是这样的。

function(key, value, rereduce){ 
    var reduced_status = "retrieved";
    for(var i=0; i<value.length; i++) {
        if(value[i].status=="new"){
            reduced_status = "new";
        }
    }
    return reduced_status;
}

编辑:实际上,因为它找到status == "new"功能应该尽快返回

感谢Alsciende推我朝着正确的解决方案,原来我真的不明白的降低作用。我并不需要一个减少功能都没有。

下面是我Map Function解决了对我来说。

function(doc) {
if(doc.urls){
  var reduced_status = "retrieved";
  for(var i=0; i<doc.urls.length; i++) {
    if(doc.urls[i].status=="new"){
        reduced_status = "new";
        break;
    }
  }
  emit(reduced_status, null);
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top