据我所知,reduce函数应该在某种程度上结合了map函数的结果,但究竟是什么传递给reduce函数?
function(keys, values){
// what's in keys?
// what's in values?
}
我试图在Futon临时视图构建器中探索这个,但我得到的只是 reduce_overflow_errors 。所以我甚至无法打印keys
或values
参数来试图理解它们的样子。
感谢您的帮助。
编辑:
我的问题如下。我正在使用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,即所述文件中出现的文本片段列表。
答案 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]
这会为您提供表单
的列表旧答案
直接来自CouchDB Wiki
function (key, values, rereduce) {
return sum(values);
}
Reduce函数在order键,值和rereduce中传递三个参数
减少功能必须处理两种情况:
当rereduce为false时
reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)
当rereduce为真时:
reduce(null, [intermediate1,intermediate2,intermediate3], true)
Reduce函数应该返回一个值,适用于最终视图的value字段和传递给reduce函数的values数组的成员。