2

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

我在这里讨论了同样的问题{如何在 Fauxton 中使用 reduce },但不明白答案:(。

我有一个工作地图功能:

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

它返回 11 个单独的文档。我想修改它以返回foo.type以及 1 的计数。我尝试过:

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

和“减少”面板中的“_count”,但显然做错了什么,因为视图没有返回任何内容。

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

4

2 回答 2

9

在 Fauxton 中,Reduce 步骤有点尴尬和不直观。

  1. 在您输入地图的下方“减少(可选)”弹出窗口中选择 _count。
  2. 选择“保存文档,然后构建索引”。这将显示您的地图结果。
  3. 找到顶部齿轮图标旁边的“选项”按钮。如果您看到的是绿色条带,请用 X 关闭绿色条带。
  4. 选择选项,然后选择“减少”复选框。选择运行查询。
于 2018-01-24T16:37:40.070 回答
1

地图

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

您的 map 函数应该发出您将查询的键。您也可以发出一个值,但如果您打算简单地获取关联的文档,则不必发出任何值。为什么?因为有一个查询参数可以用来返回相关的文档(?include_docs=true)。

减少

然后,您可以使用 reduce 函数,该函数将使用相同的键为每个结果调用。具有相同键的每个结果都将通过您的 reduce 函数进行处理以减少值。

更正示例

因此,在您的情况下,您想按我想的每种类型映射文档。

您可以创建一个函数来发出具有该type属性的文档。

function(doc){
    if(doc.type)
        emit(doc.type);
}

如果你查询这个视图,你会看到每一行的键都是文档的类型。如果您选择_countreduce 功能,您应该拥有每种类型的文档数。

查询视图时,您必须指定:group=true&reduce=true

blog post此外,您可以通过使用这些参数查询来获取所有类型的文档:?key="blog post"

于 2017-08-01T21:40:16.920 回答