在 Fauxton 学习 mapreduce

learning mapreduce in Fauxton

我是 noSQL、couchDB 和 mapreduce 的新手,需要一些帮助。

我在这里讨论了同样的问题{}但不明白答案:(.

我有一个工作地图功能:

function (foo) {
   if(foo.type == "blog post");
  emit(foo)
}

其中 returns 11 个单独的文档。我想将其修改为 return foo.type 以及计数 1。 我试过:

function (doc) {
   if(doc.type == "blog post");
  return count(doc)
}

和 Reduce 面板中的“_count”,但显然我做错了什么,因为视图没有 return 任何东西。

在此先感谢您的任何帮助或指导!

地图

因此,当您构建映射函数时,实际上是在创建字典或映射,它们是 key:value 数据结构。

您的地图函数应该发出您要查询的键。您也可以发出一个值,但如果您只想获取关联的文档,则不必发出任何值。为什么?因为有一个查询参数可以用来return文档关联(?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"

在 Fauxton 中,Reduce 步骤有点难找且不直观。

  1. Select _count 在下面的 "Reduce (optional)" 弹出窗口中键入 在您的地图中。
  2. Select"Save Document and then Build Index"。那会显示你的 地图结果。
  3. 找到顶部齿轮图标旁边的 "Options" 按钮。如果你看到一个 改为绿色带,用 X 关闭绿色带。
  4. Select 选项,然后 "Reduce" 检查圈。 Select 运行 查询。