mongodb—在过去n天内每天晚上10点到上午8点之间的时间范围内聚合数据

mongodb—在过去n天内每天晚上10点到上午8点之间的时间范围内聚合数据,mongodb,timestamp,aggregation,Mongodb,Timestamp,Aggregation,我的mongodb有一些每小时报告数据,其中包含每小时的数据。现在,我们希望聚合数据,以获得每n天的平均小时数 如果我们尝试以每天上午00点到下午23:59点的时间范围来计算平均值,例如:从上午01点到下午23:59点,我们将得到预期的结果 但问题在于,当试图在两个不同的日期之间的时间范围内累计平均值时。示例:从第1天晚上10点到第2天上午08点 我们正在寻找一种解决方案,它将第2天的数据视为第1天,并将过去n天内这两天的平均值计算在内 下面是我们的示例数据,我们遵循的是逻辑。 样本数据: {

我的mongodb有一些每小时报告数据,其中包含每小时的数据。现在,我们希望聚合数据,以获得每n天的平均小时数

如果我们尝试以每天上午00点到下午23:59点的时间范围来计算平均值,例如:从上午01点到下午23:59点,我们将得到预期的结果

但问题在于,当试图在两个不同的日期之间的时间范围内累计平均值时。示例:从第1天晚上10点到第2天上午08点

我们正在寻找一种解决方案,它将第2天的数据视为第1天,并将过去n天内这两天的平均值计算在内

下面是我们的示例数据,我们遵循的是逻辑。 样本数据:

{
    "TimeStamp" : ISODate("2017-08-17T22:00:00.000Z"),
    "A" : 100.0,
    "B" : 10.0,
    "C" : 30.0,
    "D" : 50.0
}
{
    "TimeStamp" : ISODate("2017-08-17T23:00:00.000"),
    "A" : 100.0,
    "B" : 10.0,
    "C" : 20.0,
    "D" : 30.0
}
{
    "TimeStamp" : ISODate("2017-08-18T06:00:00.000Z"),
    "A" : 100.0,
    "B" : 40.0,
    "C" : 10.0,
    "D" : 40.0
}
{
    "TimeStamp" : ISODate("2017-08-18T08:00:00.000Z"),
    "A" : 100.0,
    "B" : 50.0,
    "C" : 10.0,
    "D" : 50.0
}

{
    "TimeStamp" : ISODate("2017-09-01T22:00:00.000Z"),
    "A" : 100.0,
    "B" : 20.0,
    "C" : 10.0,
    "D" : 50.0
}

{
    "TimeStamp" : ISODate("2017-09-02T08:00:00.000Z"),
    "A" : 100.0,
    "B" : 60.0,
    "C" : 10.0,
    "D" : 70.0
}
查询是: 以下查询在上午00点到下午23:59(同一日期)之间的时间范围内正常工作

正在查找有关两个不同日期之间的时间范围的查询帮助。示例:从第1天晚上10点到第2天上午08点

 db.getCollection('prod_amount').aggregate( [ 
    { $project: {
        A: 1,        
        TimeStamp: 1, 
        dateField: {'$dateToString': {format: '%Y-%m-%d', date: '$TimeStamp'}},
        minutes: { $add: [
            { $multiply: [ { $hour: '$TimeStamp' }, 60 ] }, 
            { $minute: '$TimeStamp' } 
        ] } 
    } },
    { $match: {"TimeStamp":{$gte:new Date("2017-08-17"),$lte:new Date("2017-09-01")}, 'minutes' : { $gte : 10 * 60, $lte : 20 * 60 } } },
    { $group: {"_id":{dateField: '$dateField'}, Prod : {"$avg":"$A"}}}
])