CouchDB映射/还原为数组
我有许多文件如下所示:CouchDB映射/还原为数组,couchdb,mapreduce,Couchdb,Mapreduce,我有许多文件如下所示: {userId:123,msg:{时间戳:123456,事件:“actionA”} {userId:123,msg:{时间戳:123466,事件:“actionB”} 等.. 地图fn: emit(doc.userId,[doc.msg]) 减少fn: return[].concat.apply([],vs) 这些函数似乎达到了我的预期效果,因此我认为我会看到如下输出: 键:123,值:[{时间戳:123456,事件:“actionA”},{时间戳:123466,事件:“
{userId:123,msg:{时间戳:123456,事件:“actionA”}
{userId:123,msg:{时间戳:123466,事件:“actionB”}
等..
地图fn:
emit(doc.userId,[doc.msg])
减少fn:
return[].concat.apply([],vs)
这些函数似乎达到了我的预期效果,因此我认为我会看到如下输出:
键:123,值:[{时间戳:123456,事件:“actionA”},{时间戳:123466,事件:“actionB”},…等等]
但是,我得到了一个reduce溢出错误,“reduce输出必须更快地收缩”。事实上,他们说“根据经验,reduce函数应该减少到单个标量值。”。。。如果您尝试使用reduce“错误的方式”,CouchDB将向您发出警告
所以,我想我用沙发先生是“错误的方式”。做这种计算的“正确方法”是什么?我认为正确的方法是使用一个。如果需要的话,可以让列表函数输出JSON。我以前也遇到过这个问题。CouchDB喜欢高名单,而不是胖名单。换言之,在视图中使用关键点可能可以获得所需的内容,而不必将它们缩减为相同的内容 如果希望查看来自用户标识的所有消息,则不需要reduce函数。只需使用
?key=123
查询视图即可。您将看到该用户ID的所有消息,并且大小没有限制
如果您对格式不满意(如果您只是必须更改coach发送给您的JSON),那么Simon的list函数链接是正确的