我是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的聚合框架使用流,所以看起来这种依赖于状态的聚合会非常简单。但是,我还没有遇到过这种技术的机制或术语。
有什么建议吗?是否有内置机制来做这样的事情?
答案 0 :(得分:0)
我将用我结束实施的解决方案回答我自己的问题。
我意识到我对每个文档的之前的状态非常感兴趣。在我的情况下,文档按时间顺序大批量插入。因此,我只是创建了一个state_prev
字段和一个delta
字段(顺序文档'timestamp
值之间的差异)。
{
timestamp: Number,
state: Number,
state_prev: Number,
delta: Number
}
我现在可以$sum
新的delta
字段和$group
字段state_prev
来实现我想要的聚合计算。