CouchDB中的reduce函数参数中有什么?
我知道reduce函数应该在某种程度上结合map函数的结果,但到底传递给reduce函数的是什么CouchDB中的reduce函数参数中有什么?,couchdb,mapreduce,Couchdb,Mapreduce,我知道reduce函数应该在某种程度上结合map函数的结果,但到底传递给reduce函数的是什么 function(keys, values){ // what's in keys? // what's in values? } 我试图在Futon临时视图生成器中探索这一点,但我得到的只是减少溢出错误。因此,我甚至无法打印键或值参数来试图理解它们的外观 谢谢你的帮助 编辑: 我的问题如下。我正在使用Futon的临时视图生成器 我有一组表示文本文件的文档(这是一个脚本,我想用它来简化文档
function(keys, values){
// what's in keys?
// what's in values?
}
我试图在Futon临时视图生成器中探索这一点,但我得到的只是减少溢出错误。因此,我甚至无法打印键
或值
参数来试图理解它们的外观
谢谢你的帮助
编辑:
我的问题如下。我正在使用Futon的临时视图生成器
我有一组表示文本文件的文档(这是一个脚本,我想用它来简化文档的翻译)
我还有一些文档,它们表示出现在上述文件中的文本片段,以及它们在每个文件中的位置
text_fragment:
id
file_id // correspond to a text_file document
position
我想为每个文本文件获取出现在所述文件中的文本片段列表。更新 关于JavaScript API更改的注意事项:在2008年5月20日星期二之前(Subversion修订版r658405),向映射索引发出一行的函数名为“map”。它现在已更改为“发射” 这就是为什么使用了
map
而不是emit
它被重命名的原因。抱歉,我更正了我的代码,使其在CouchDB的最新版本中有效
编辑
我认为您需要的是一个在sql db语言中有很多关系或连接的数据库。下面是Christopher Lenz的一篇文章,它准确地描述了在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]
这将为您提供一个表单列表
- 文本文件
- 正文第1部分
- 文本分割2
- key是一个数组,其元素是[key,id]形式的数组,其中key是map函数发出的键,id是从中生成键的文档的键
- 值将是为键中的各个元素发出的值的数组
i、 e.
reduce([[key1,id1],[key2,id2],[key3,id3],[value1,value2,value3],false)
- 密钥将为空
- 值将是以前调用reduce函数返回的值数组
i、 e.
Reduce函数应返回一个值,该值既适用于最终视图的value字段,也适用于传递给Reduce函数的values数组的成员reduce(空[intermediate1,intermediate2,intermediate3],真)
更新 关于JavaScript API更改的注意事项:在2008年5月20日星期二之前(Subversion修订版r658405),向映射索引发出一行的函数名为“map”。它现在已更改为“发射” 这就是为什么使用了
map
而不是emit
它被重命名的原因。抱歉,我更正了我的代码,使其在CouchDB的最新版本中有效
编辑
我认为您需要的是一个在sql db语言中有很多关系或连接的数据库。下面是Christopher Lenz的一篇文章,它准确地描述了在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]
这将为您提供一个表单列表
- 文本文件
- 正文第1部分
- 文本分割2
- key是一个数组,其元素是[key,id]形式的数组,其中key是map函数发出的键,id是从中生成键的文档的键
- 值将是为键中的各个元素发出的值的数组
i、 e.
reduce([[key1,id1],[key2,id2],[key3,id3],[value1,value2,value3],false)
- 密钥将为空
- 值将是以前调用reduce函数返回的值数组
i、 e.
Reduce函数应返回一个值,该值既适用于最终视图的value字段,也适用于传递给Reduce函数的values数组的成员reduce(空[intermediate1,intermediate2,intermediate3],真)
谢谢,但我不知道怎么用它。我编辑了我的第一篇文章,详细介绍了我试图解决的问题。我已经设法得到了他们在文章中得到的结果,那就是(文件、文本片段)对夫妇的列表。但是我想要的是一个(文件,[text\u fragment1,text\u fragment2…])列表,其中每个文件只出现在一对文件中,另一对文件的坐标包含与该文件对应的所有文本片段。可能我遗漏了一些内容,因为在文章中他们调用了“map”而不是“emit”。我不知道这个“map”函数来自哪里,它的作用是什么。我想我要放弃了。当你完全回答了主题的原始问题时,我会检查你。谢谢,但我不知道如何使用它。我编辑了我的第一篇文章,详细介绍了我试图解决的问题。我已经设法得到了他们在文章中得到的结果,那就是(文件、文本片段)的列表