如何从 5 分钟嵌套数组数据聚合 OHLC 1 分钟(mongodb、猫鼬)



我有一个 mongodb 数据存储,其中包含 1 分钟的 OHLCV 数据,如下所示(时间、打开、最高、低、收盘、音量),使用 mongoose 存储在 nodejs 中。

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

我需要从这些数据中提取 5 分钟间隔的相同格式。我找不到如何在mongodb/mongoose中做到这一点,即使经过几个小时的搜索,我也是新手。请帮忙。它令人困惑,尤其是因为它的嵌套数组,并且数组中没有字段。

注意:假设对于 5 分钟数据,您将有 4 个来自数据库的 1 分钟数据的样本(数组),然后 时间 : 最后 1 分钟数据数组的时间元素(5 分钟间隔)打开 : 前 1 分钟数据数组的第一个元素(5 分钟间隔)高:所有 1 分钟数据数组中第 2 个元素的最大值(该 5 分钟间隔)


低:所有 1 分钟数据数组中第 3 个元素的最小值(该 5 分钟间隔)
关闭 : 所有 1 分钟数据数组中第 4 个元素的最后一个元素(5 分钟间隔)体积:所有 1 分钟数据数组中最后一个数组的最后一个元素(5 分钟间隔)

请检查可视化表示 此处

想法是能够以相同的方式从基本的 1 分钟数据库中提取 5 分钟、10 分钟、30 分钟、1 小时、4 小时、1 天的间隔。

您需要使用聚合管道来执行此操作,比较数据数组中存储在纪元时间中的第一个元素,获取$start$end间隔的纪元时间,在查询中使用该值

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

最新更新