在Fauxton学习mapreduce

时间:2017-08-01 20:43:06

标签: couchdb fauxton

我是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没有返回任何内容。

提前感谢您的任何帮助或指导!

2 个答案:

答案 0 :(得分:4)

在Fauxton中,Reduce步骤有点笨拙且不直观。

  1. 在您键入的下方的“缩小(可选)”弹出窗口中选择_count 在你的地图上。
  2. 选择“保存文档然后构建索引”。那将显示你的 地图结果。
  3. 找到齿轮图标旁边顶部的“选项”按钮。如果你看到了 相反,绿色带,用X关闭绿色带。
  4. 选择选项,然后选择“缩小”复选圆。选择“运行查询”。

答案 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"