【问题标题】:Reduce and count documents based on previous values根据先前的值减少和计数文档
【发布时间】:2013-04-17 12:48:57
【问题描述】:

假设我有以下格式的 CouchDB 文档:

...
{
  player: 'abcde',
  action: 'run'
},
{
  player: 'abcde',
  action: 'jump'
},
{
  player: 'abcde',
  action: 'left'
},
{
  player: 'abcde',
  action: 'right'
},
....

我的view 看起来像这样:

function(doc) {
  emit(doc.player, doc.action)
}

我如何计算玩家abcde 有多少次操作jump紧接着 操作run?我不想要jumpsruns 的总数。甚至可以从mapreduce 函数中的当前文档访问previousnext 文档?

谢谢!

【问题讨论】:

  • 不,您的地图函数将没有下一个、上一个甚至完整集合的概念。您可以尝试使用_list 函数来进行此类计算。
  • “立即关注”是什么意思?文档是否按时间排序并且您不想要jumprightrun
  • @MarcinSkórzewski 是的,这就是我想要的。 AT:DominicBarnes 谢谢,我会试试的。

标签: javascript mapreduce couchdb


【解决方案1】:

不,您不能像这样访问 map/reduce 中的其他文档。对于初学者,我不认为reduce order是明确定义的,所以恐怕'previous'和'next'甚至没有真正的意义。

相反,我建议您将每个玩家操作的整个历史记录合并到一个文档中,例如:

{
  "player": "abcde",
  "actions" : [ "right", "run", "jump" ]
}

然后,您可以仅在 map 方法中从数组中计算特定的有序操作集,并在 reduce 中根据需要简单地聚合它们。

【讨论】:

  • 有趣的方法。 map 方法会是什么样子?
  • 查看jsfiddle.net/uHGgy/2 获取运行示例。您可以从那里直接复制 mapFn() 函数作为 map 方法(没有 'var mapFn =' 位),它应该“正常工作”,不需要减少,除非您想以某种方式聚合这些结果。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多