【发布时间】:2010-03-16 12:29:37
【问题描述】:
我正在寻找一个 map/reduce 函数来计算设计文档中的状态。 您可以在下面看到我当前数据库中的示例文档。
{
"_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;
}
alt text http://img.skitch.com/20100316-qeawxgd5pru8d5i6bprygcsmhf.jpg
我做错了什么? (我知道我想让你为我写代码,我很内疚,但现在我在从数据库中获取数据后,在 ruby 中计算状态。如果已经从数据库中获取了正确的数据,那就太好了数据库)
【问题讨论】:
-
JSON.stringify(value) 返回什么? (JSON 是 Firefox 3.5+ 中的原生窗口对象)
标签: javascript couchdb mapreduce