MongoDB中依赖于状态的聚合

时间:2013-07-10 21:50:45

标签: mongodb mapreduce aggregation-framework

我是MongoDB的新手,请原谅我,如果这个问题有一个简单的答案。

我正在尝试设计一个聚合事件生成文档“状态”的查询。特别是,我对每个州“花”的时间感兴趣。

假设我有一个包含以下架构的MongoDB集合:

{
 timestamp: {type: Number, required: true},
 state: {type: Number, required: true}
}

我想生成状态列表以及每个州花费的时间。例如,如果我有以下文档(按时间戳排序),

{timestamp: 100, state: 0},
{timestamp: 102, state: 1},
{timestamp: 110, state: 1},
{timestamp: 120, state: 0},
{timestamp: 123, state: 1}

然后我想产生[{state: 0, time: 5}, {state: 1, time: 18}],其中第一个条目的时间是(102-100)+(123-120),第二个条目的时间是(120-102)。

我知道Mongo的聚合框架使用流,所以看起来这种依赖于状态的聚合会非常简单。但是,我还没有遇到过这种技术的机制或术语。

有什么建议吗?是否有内置机制来做这样的事情?

1 个答案:

答案 0 :(得分:0)

我将用我结束实施的解决方案回答我自己的问题。

我意识到我对每个文档的之前的状态非常感兴趣。在我的情况下,文档按时间顺序大批量插入。因此,我只是创建了一个state_prev字段和一个delta字段(顺序文档'timestamp值之间的差异)。

{
  timestamp: Number,
  state: Number,
  state_prev: Number,
  delta: Number
}

我现在可以$sum新的delta字段和$group字段state_prev来实现我想要的聚合计算。