0

我对 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 的聚合框架使用流,因此这种依赖于状态的聚合似乎非常简单。但是,我还没有遇到过这样的机制或这种技术的术语。

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

4

1 回答 1

0

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

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

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

我现在能够通过$sumdelta字段和字段来实现我想要的聚合计算。$groupstate_prev

于 2013-07-23T21:57:06.673 回答