CouchDB中的reduce函数参数是什么?

时间:2012-07-31 15:19:13

标签: couchdb mapreduce

据我所知,reduce函数应该在某种程度上结合了map函数的结果,但究竟是什么传递给reduce函数?

function(keys, values){
  // what's in keys?
  // what's in values?
}

我试图在Futon临时视图构建器中探索这个,但我得到的只是 reduce_overflow_errors 。所以我甚至无法打印keysvalues参数来试图理解它们的样子。

感谢您的帮助。

编辑:

我的问题如下。我正在使用Futon的临时视图构建器。

我有一组代表文本文件的文档(它是我想用来简化文档翻译的脚本)。

text_file:
    id   // the id of the text file is its path on the file system

我还有一些文件代表出现在所述文件中的文本片段,以及它们在每个文件中的位置。

text_fragment:
    id
    file_id   // correspond to a text_file document 
    position

我想获取每个text_file,即所述文件中出现的文本片段列表。

1 个答案:

答案 0 :(得分:4)

<强>更新

  

关于JavaScript API更改的注意事项:在2008年5月20日星期二(Subversion修订版r658405)之前,向地图索引发出一行的函数被命名为“map”。它现在已经改为“发射”。

这就是为什么使用map代替emit重命名的原因。对不起,我更正了我的代码,使其在最新版本的CouchDB中有效。

修改

我认为你要找的是一个有很多关系或加入sql db语言。以下是Christopher Lenz的一篇blog文章,其中详细描述了CouchDB中此类场景的选择。

在最后一部分中,描述了一种技术,您可以将其用于所需的列表。 您需要以下格式的地图功能

function(doc) {
  if (doc.type == "text_file") {
    emit([doc._id, 0], doc);
  } else if (doc.type == "text_fragment") {
    emit([doc.file_id, 1], doc);
  }
}

现在您可以通过以下方式查询视图:

my_view?startkey=["text_file_id"]&endkey;=["text_file_id", 2]

这会为您提供表单

的列表
  • text_file
  • text_fragement_1
  • text_fragement_2
  • ..

旧答案

直接来自CouchDB Wiki

function (key, values, rereduce) {
    return sum(values);
}

Reduce函数在order键,值和rereduce中传递三个参数

减少功能必须处理两种情况:

  1. 当rereduce为false时

    • key将是一个数组,其元素是[key,id]形式的数组,其中key是map函数发出的键,id是生成该键的文档的id。
    • values将是为键中的各个元素发出的值的数组 即reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)
  2. 当rereduce为真时:

    • 键将为空
    • values将是之前调用reduce函数返回的值数组 即reduce(null, [intermediate1,intermediate2,intermediate3], true) Reduce函数应该返回一个值,适用于最终视图的value字段和传递给reduce函数的values数组的成员。