MongoDB查询:如何选择匹配值的最长时间段

时间:2017-03-04 07:14:07

标签: mongodb date datetime

我有一个mongo数据库,其中有许多记录格式为:

{
  id: {
    $_id
  },
  date: {
    $date: YYYY-MM-DDThh:mm:ssZ
  },
  reading: X.XX
}

其中date是mongo中的时间戳,read是float (id只是数据点的唯一标识符)

我希望能够计算读数为某个值的最长时间(假设为便于使用0.00)并返回此时间段的起点和终点。如果有多个相同长度的时间段,我希望它们全部返回。

最终,例如,我希望能够说

"阅读时间0.001.25 hours

的最长时间段

之间的

2000-01-01T00:00:00 - 2000-01-01T01:15:00

2000-06-01T02:00:00 - 2000-06-01T03:15:00

2000-11-11T20:00:00 - 2000-11-11T21:15:00。"

对于我的mongo聚合查询,我正在考虑这样做:

  1. 获取我对感兴趣的时间范围(例如2000-01-01 to 2001-01-01
  2. 按日期降序排序数据
  3. 以某种方式选择读数为0.00的最长时间。
  4. 这是我到目前为止的查询:

    [
      {
        $match: {
        date: { $gte: ISODate("2000-01-01T00:00:00.0Z"), $lt: ISODate("2001-01-01T00:00:00.0Z") }
        }
      },
      { "$sort": { "date": -1 } },
      {
        "$group" : {
          "_id": null,
          "Maximum": { "$max": { "max": "$reading", "date": "$date" } },
          "Longest": { XXX: { start_dates: [], end_dates: [] } }
        }
      },
      {
        "$project": {
          "_id": 0,
          "max": "$Maximum",
          "longest": "$Longest"
        }
      }
    ]
    

    我不知道如何选择最长的跑步。你会怎么做?

    (你会注意到我也对这段时间内的最大阅读时间以及最大阅读时间的日期感兴趣。目前我只记录最新的日期/时间,但希望如此记录最终值最大值的所有日期/时间。)

0 个答案:

没有答案