0

Currently, my code looks like

function(keys, values, rereduce){
    return {"key":keys[0][0],"count":values.length};
}

Upon running this, the resulting row is:

key = None, value={u'count':3,u'key':u'123456'}

This works for my purposes, as I just parse the JSON string in the value attribute, but it seems like the wrong way to be doing things.

So how can I have the reduce function emit a key value, rather than None?

4

3 回答 3

1

我认为您的代码仅对第一次减少有效。重新减少失败。阅读CouchDB 视图简介:1.2.2 减少函数。当第三个参数 ( ) 是时,请注意声明的第一个参数 ( key) 。reduce()rereducetrue

我也认为你count不会像你期望的那样工作rereduce==true。它应该总结之前减少的计数,而不是计数

于 2012-08-16T13:27:26.803 回答
0

我弄清楚发生了什么。reduce 函数创建了一个单一的标量值,而我想要的是一个键值对列表。发生这种情况是因为我没有使用grouping

通过将 'group=true' 参数添加到我的查询中,使用 _count 作为我的 reduce 现在产生

key = 123456, value=3

没有分组意味着所有数据都被简化为一个单一的标量值。通过启用分组,只有具有相同键值的项目才能减少事情,这正是我想要的。

于 2012-08-16T11:46:56.037 回答
0

没有足够的上下文可以确定,但您可能会以不同于预期的方式考虑 reduce 函数。来自 CouchDB 指南

如果您不将值减少到单个标量值或具有固定数量的小尺寸标量值的小型固定尺寸对象或数组,那么您可能做错了。

你的例子确实减少了一些小东西,但这看起来像是巧合。如果你想输出某种键,你可能需要一个 map 函数。或者,重新考虑您在做什么以及它如何适合 MapReduce 模型。

于 2012-08-15T20:28:52.190 回答