【问题标题】:filter in aggregation and groupby to get values from given time interval在聚合和 groupby 中过滤以获取给定时间间隔的值
【发布时间】:2017-08-28 19:07:58
【问题描述】:

在下面的$aggregate查询中,要添加一个带有$gt$lt的过滤器

mongo 文档:

{
    "_id" : ObjectId("599eb4fae0f86361c36b1c91"),
    "device_id" : ObjectId("5993df1b9a5fea3183064e49"),
    "updatedAt" : ISODate("2017-08-24T11:38:12.135Z"),
    "power_data" : [ 
        {
            "timestamp" : ISODate("2017-08-24T11:14:04.256Z"),
            "_id" : ObjectId("599eb4fdeea8c69622751de3"),
            "pfactor" : 1,
            "rpower" : 0,
            "voltage" : 0,
            "current" : 0,
            "energy" : 0,
            "power" : 0
        }, 
        {
            "timestamp" : ISODate("2017-08-24T11:14:04.256Z"),
            "_id" : ObjectId("599eb507eea8c69622751de4"),
            "pfactor" : 1,
            "rpower" : 0,
            "voltage" : 0,
            "current" : 0,
            "energy" : 0,
            "power" : 0
        }, 
        {
            "timestamp" : ISODate("2017-08-24T11:14:04.256Z"),
            "_id" : ObjectId("599eb511eea8c69622751de5"),
            "pfactor" : 1,
            "rpower" : 0,
            "voltage" : 0,
            "current" : 0,
            "energy" : 0,
            "power" : 0
        }, 
 ],
    "__v" : 0,
    "createdAt" : ISODate("2017-08-24T11:14:05.946Z")
}

这里是查询:

aggregate([{
        $match: { "device_id": { $in: [ObjectId("5993df1b9a5fea3183064e49")] } }
    }, {
        $project: {
            "power_data": 1
        }
    }, {
        $unwind: "$power_data"
    }, 
     {     
        $project: {
           "power": "$power_data.power", "hours": { $dayOfMonth: "$power_data.timestamp" }
        }
    }, {
        $group: {
            "_id": "$hours", "avg_power": { $avg: "$power" }
        }
    }]

我想要的是,通过传递一些日期时间戳范围,我将只获取这个时间间隔的数据,目前它的整体计算。

感谢您宝贵的时间!

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    我相信您只需要在$unwind 之后添加一个额外的$match 阶段。

    这是完整的管道:

    {
        $match: { "device_id": { $in: [ObjectId("5993df1b9a5fea3183064e49")] } }
    }, 
    {
        $project: { "power_data": 1 }
    },
    {
        $unwind: "$power_data"
    }, 
    {
        $match: {
            "power_data.timestamp" : { $gt : ISODate("2017-08-23T12:00:00.000Z"), $lt: ISODate("2017-08-25T12:00:00.000Z")}
        }
    },
    {     
        $project: { "power": "$power_data.power", "hours": { $dayOfMonth: "$power_data.timestamp" }
    }
    },
    {
        $group: { "_id": "$hours", "avg_power": { $avg: "$power" } }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2018-07-17
      相关资源
      最近更新 更多