我是noSQL,couchDB和mapreduce的新手,需要一些帮助。
我在此处讨论了同样的问题{How to use reduce in Fauxton},但不明白答案:(。
我有一个有效的地图功能:
function (foo) {
if(foo.type == "blog post");
emit(foo)
}
返回11个单独的文件。我想修改它以返回 foo.type 以及计数1。 我试过了:
function (doc) {
if(doc.type == "blog post");
return count(doc)
}
和" _count"来自Reduce面板,但显然我做错了,因为View没有返回任何内容。
提前感谢您的任何帮助或指导!
答案 0 :(得分:4)
在Fauxton中,Reduce步骤有点笨拙且不直观。
答案 1 :(得分:1)
因此,当您构建一个map函数时,您实际上是在创建一个关键字:数据结构的字典或映射。
您的地图功能应该发出您要查询的键。您也可以发出一个值,但如果您只想获取相关文档,则不必发出任何值。为什么?因为有一个查询参数可用于返回关联的文档(?include_docs=true
)。
然后,您可以使用reduce函数,该函数将使用相同的键为每个结果调用。具有相同键的每个结果都将通过reduce函数处理以减少该值。
因此,在您的情况下,您希望按照我想要的类型将文档映射到文档。
您可以创建一个发出具有type
属性的文档的函数。
function(doc){
if(doc.type)
emit(doc.type);
}
如果查询此视图,您将看到每行的键将是文档的类型。如果选择_count
reduce函数,则每个类型都应包含文档数。
查询视图时,您必须指定:group=true&reduce=true
此外,您可以通过查询这些参数来获取blog post
类型的所有文档:?key="blog post"