MongoDB使用聚合时区问题按月分组

时间:2017-12-27 10:11:08

标签: c# mongodb mongodb-query aggregation-framework

我有以下聚合结构,它按月对数据进行分组,并从年初开始按月汇总。目前,我的文档从第9个月开始,之前没有任何内容。当我运行以下聚合时,结果显示数据从第8个月开始。我猜它与时区有关。因为第8个月只列出了3个小时的数据(我的时区为+3)。

db.collectedData.aggregate(

// Pipeline
[
    // Stage 1
    {
        $match: {
            _Timestamp: {
                            $gte: ISODate("2017-01-01T21:00:00.000Z"),
                            $lte: ISODate("2019-04-19T01:30:00.000Z")
                        },
                        "Registers.totalconsumedactiveenergy" : {"$exists" : true}
        }
    },

    // Stage 2
    {
        $project: {
        "Datem" : "$_Timestamp",
        "month" : {"$month" : "$_Timestamp" },
        "device" : "$_DeviceID",
        "datam" : "$$ROOT.Registers.totalconsumedactiveenergy"
        }
    },

    // Stage 3
    {
        $group: { 
         "_id": {
                       "Month": "$month",
                       "Device" : "$device"

                },

                first:{$first:"$$ROOT.datam"},
                last: { $last: "$$ROOT.datam" }
        }
    },

    // Stage 4
    {
        $project: {
           totalConsumption: { $sum: { $subtract: [ "$last", "$first" ] } },
           month: "$_id.Month"
        }
    },

    // Stage 5
    {
        $group: {
        "_id": "$month", 
        "total": { "$sum": "$totalConsumption" }
        }
    },

    // Stage 6
    {
        $sort: {
        "_id" : 1
        }
    },

]

);

这可行,并给我这样的结果 Result Image

从我的应用程序中,我将localtimezone发送到聚合但仍未成功。

我的文件中最早的日期是 2017-08-31T21:00:00.000Z(UTC)

我该如何解决这个问题?

0 个答案:

没有答案