MongoDB中的时间序列和序列分析

时间:2016-08-18 03:30:29

标签: mongodb aggregation-framework

假设我在MongoDB中有以下数据:



{
  timePeriod: 1,
  foo: 1,
  bar: 6,
  baz: 8
},
  {
  timePeriod: 2,
  foo: 7,
  bar: 5,
  baz: 2
},
  {
  timePeriod: 3,
  foo: 3,
  bar: 6,
  baz: 9
},
  {
  timePeriod: 4,
  foo: 4,
  bar: 5,
  baz: 4
},
  {
  timePeriod: 5,
  foo: 0,
  bar: 8,
  baz: 1
},
  {
  timePeriod: 6,
  foo: 6,
  bar: 1,
  baz: 0
},
  
    




按timePeriod排序对象后,我感兴趣的是检查每个排序对象之间出现的序列,并将此序列附加到原始数据。

因此,在timePeriod 1和timePeriod 3之间,foo的序列是1,7,3,在time period 4和timePeriod 6之间,foo的序列是4,0,6。

首先 - 有人知道像MongoDB这样做的方法。它看起来很简单(并且很容易使用Python / Pandas,但我不太了解MongoDB。我希望查询的最终结果看起来像下面的代码。

第二件事 - 如果我想对这个序列做一些操作,我就会离开查询(比如找出序列中每个数字和下一个数字之间的绝对距离,所以1,7,3变为6,4)可以在MongoDB中做到吗?



{
  timePeriod: 1,
  foo: 1,
  bar: 6,
  baz: 8,
  fooSeqFromThisTimeOnwards: [1, 7, 3]
},
  {
  timePeriod: 2,
  foo: 7,
  bar: 5,
  baz: 2,
  fooSeqFromThisTimeOnwards: [7, 3, 4]
},
  {
  timePeriod: 3,
  foo: 3,
  bar: 6,
  baz: 9,
  fooSeqFromThisTimeOnwards: [3, 4, 0]
},
  {
  timePeriod: 4,
  foo: 4,
  bar: 5,
  baz: 4,
  fooSeqFromThisTimeOnwards: [4, 0, 6]
},
  {
  timePeriod: 5,
  foo: 0,
  bar: 8,
  baz: 1,
  fooSeqFromThisTimeOnwards: [0, 6, nan]
},
  {
  timePeriod: 6,
  foo: 6,
  bar: 1,
  baz: 0,
  fooSeqFromThisTimeOnwards: [6, nan, nan]
},




更新:这只是对此的快速补充 - 我对此的研究越多,似乎不可能这样做(??) - 我能想到的唯一解决方案就是使用一些forEach thing,迭代并获得$ gt current currentPeriod的下一个n foo值,并将这些值附加到我在迭代中的对象。然后我可以按序列分组并返回类似的序列对象。

但是这种方法似乎非常昂贵,就像我有一个Web服务,它对不同大小的序列提出了很多要求。那么将序列硬编码到原始数据中然后只需要正则表达式查询这个以在需要时选择具有n个元素的序列更好吗?但是,如果我这样做,我的原始数据似乎有一些冗余,并变得更大。

只是不确定这里最好的方法......

0 个答案:

没有答案