CouchDB Map/Reduce到一个数组

Mat*_*ard 5 couchdb mapreduce

我有很多文档看起来像这样:

{userId: 123, msg:{ timestamp:123456, event:"actionA"} }

{userId: 123, msg:{ timestamp:123466, event:"actionB"} }

etc...

地图fn:

emit(doc.userId, [doc.msg])

减少fn:

return [].concat.apply([], vs)

这些函数看起来像我期望的那样,所以我想我会看到如下的输出:

Key: 123, Value: [{timestamp:123456, event:"actionA"}, {timestamp:123466, event:"actionB"}, ...etc...]

但是,我得到一个减少溢出错误,"减少输出必须更快地缩小".实际上,couchdb文档说"根据经验,reduce函数应该减少到单个标量值." ......"如果你尝试使用"错误方式",CouchDB会给你一个警告"".

所以,我想我正在使用Couch MR"错误的方式".进行这种计算的"正确方法"是什么?

Jas*_*ith 5

我以前也打过这个.CouchDB喜欢高级列表,而不是胖列表.换句话说,您可以在视图中使用获得所需的内容,而不是将它们缩减为相同的内容.

如果要查看来自userId的所有消息,则不需要reduce函数.只需查询您的视图即可?key=123.您将看到该userId的所有消息,并且大小没有限制.

如果您对格式不满意(如果您只是必须更改沙发发送给您的JSON),那么Simon的列表功能链接是正确的.