【问题标题】:CouchDB Map/Reduce to an arrayCouchDB 映射/减少到数组
【发布时间】:2012-03-09 18:57:46
【问题描述】:

我有一些看起来像这样的文件:

{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...]

但是,我遇到了 reduce 溢出错误,“Reduce 输出必须更快地缩小”。事实上,couchdb docs 说“根据经验,reduce 函数应该减少到单个标量值。” ...“如果您尝试使用 reduce 的“错误方式”,CouchDB 会给您一个警告。

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

【问题讨论】:

    标签: couchdb mapreduce


    【解决方案1】:

    我以前也打过这个。 CouchDB 喜欢高列表,而不是胖列表。换句话说,您可能可以在视图中使用 keys 获得您想要的东西,而不是将它们简化为相同的东西。

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

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

    【讨论】:

      【解决方案2】:

      我认为正确的方法是使用list function。如果你想要的话,你可以让你的列表函数输出 JSON。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        相关资源
        最近更新 更多