我有一个MongoDB数据存储,其中1分钟的OHLTV数据如下(time、open、high、low、close、volume),使用Mongoose在nodejs中存储。

{
   "_id":1,
   "__v":0,
   "data":[
      [
         1516597690510,
         885000,
         885000,
         885000,
         885000,
         121.2982
      ],
      [
         1516597739868,
         885000,
         885000,
         885000,
         885000,
         121.2982
      ]
      ...
   ]
}

我需要从这些数据中提取相同格式的数据,间隔5分钟。我在mongodb/mongoose中找不到如何做到这一点,即使作为新手搜索了几个小时。请帮忙。它使esp感到困惑,因为它的嵌套数组中没有字段。
注意:假设对于5分钟的数据,您将有4个来自数据库的1分钟数据样本(数组),然后
时间:最后1分钟数据数组的时间元素(该5分钟间隔)
打开:第一个1分钟数据数组的第一个元素(5分钟间隔)
高:所有1分钟数据数组中第2个元素的最大值(5分钟间隔)
低:所有1分钟数据数组中第3个元素的最小值(5分钟间隔)
关闭:所有1分钟数据数组中第4个元素的最后一个(5分钟间隔)
volume:所有1分钟数据数组中最后一个数组的最后一个元素(5分钟间隔)
请检查视觉表现here
想法是能够提取5分钟,10分钟,30分钟,1小时,4小时,1天的间隔,同样的方式从基础1分钟数据库。

最佳答案

为此,需要使用聚合管道来比较存储在epoch time中的数据数组中的第一个元素,获取$start$end间隔的epoch time,并在查询中使用该值

 db.col.aggregate(
    [
        {$project : {
            data : {
                    $filter : {input : "$data", as : "d", cond : {$and : [{$lt : [ {$arrayElemAt : ["$$d" , 0]}, "$end"]}, {$gte : [ {$arrayElemAt : ["$$d" , 0]}, "$start"]}]}}
                }
            }
        }
    ]
).pretty()

关于mongodb - 如何从1分钟嵌套数组数据(mongodb,mongoose)聚合OHLC 5分钟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48375822/

10-16 12:51