gpt4 book ai didi

javascript - 映射/减少 CouchDB 中的哈希数组

转载 作者:行者123 更新时间:2023-11-29 18:36:45 26 4
gpt4 key购买 nike

我正在寻找一个 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 View 如下所示:

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

我尝试了一些东西,但没有任何效果。现在我的 Map Function 看起来像这样:

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

还有我的Reduce 函数

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 个 url

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

alt text http://img.skitch.com/20100316-qeawxgd5pru8d5i6bprygcsmhf.jpg

我做错了什么? (我知道我想让你为我写代码,我感到内疚,但现在我在从数据库中获取数据后用 ruby​​ 计算状态。如果已经从数据库)

最佳答案

reduce 函数的变量 value 是 map 函数发出的值数组。在您的例子中,value 是一个由“url”数组组成的数组。在 futon 中运行 map-reduce 时,它​​设置 group=true 以便 map-reduce 为 map 函数发出的每个键单独运行。在您的例子中,这些键是文档 _ids。也就是说,reduce函数的value是一个数组,其元素都是属于某个doc_id的url数组。由于 doc _ids 是唯一的,您最终会得到 reduce 函数的 value 是一个包含一个元素的数组,该元素是相应文档的 url 数组。这就是为什么 value.length 在您的 reduce 函数中始终为 1。

但情况可能会变得更糟:如果您最终进入重新归约循环,reduce 函数的 value 是先前调用 reduce 函数返回的值数组。在您的情况下,您将使用看起来像 ["retrieved","new","re​​trieved"]value 调用 reduce 函数,这不会导致正确的结果。

通常,reduce 函数用于聚合 map 函数发出的数据,例如计算行数或求和值 - 这在您的情况下不是必需的。您可以在此处阅读有关 couchdb 中的 map-reduce 的更多信息:

http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

http://books.couchdb.org/relax/design-documents/views

关于javascript - 映射/减少 CouchDB 中的哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com