【问题标题】:Mongodb aggregate for timeseries data时间序列数据的 Mongodb 聚合
【发布时间】:2016-04-14 01:04:57
【问题描述】:

我有一个包含几十万条记录的时间序列数据集。我正在尝试在 mongo 中创建一个聚合查询,以便在平均价格的同时按时间间隔对这些数据进行分组。

理想情况下,我想要 10 分钟的间隔(600000 毫秒)和平均价格。我不太确定如何从现在的位置继续。

数据~几十万条记录:

  {
    "time" : 1391485215000,
    "price" : "0.00133355",
    }

query = [
    {   
        "$project": {
            "_id":"$_id",
            "price":"$price",
            "time": {
                xxxx
            }
        }
    },
    {   
        "$group": {xxxx}
    }
]

【问题讨论】:

    标签: mongodb time-series


    【解决方案1】:

    所以看来我的架构存在根本缺陷。我使用的是纪元时间戳而不是 mongo 的 Date 类型,并将其他数字存储为字符串而不是双精度数。我尝试了一些解决方法,但除非它们的类型正确,否则您似乎无法使用内置聚合函数。

        $project: {
            year: { $year: '$time'},
            month: { $month: '$time'},
            day: { $dayOfMonth: '$time'},
            hour: { $hour: '$time'},
            price: 1,
            total: 1,
            amount: 1
        }
    },
    {
        $group : {
            _id: { year: '$year', month: '$month', day: '$day', hour: '$hour' },
            price:{
                $avg: "$price"
            },
            high:{
                $max: "$price"
            },
            low:{
                $min: "$price"
            },
            amount:{
                $sum: "$amount"
            },
            total:{
                $sum: "$total"
            }
        }
    

    【讨论】:

    • 对你有好处。您发现了架构中的缺陷并纠正了问题。因此,您能够解决问题。您可能对here 的答案感兴趣,以了解 $substr 的一些未记录用法以格式化您的日期。
    猜你喜欢
    • 2015-10-11
    • 2023-03-07
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多