根据时间序列和事件代码细分事件文档

时间:2019-01-23 02:28:12

标签: mongodb mongodb-query

我在mongoDB中有一个集合,该集合每N分钟存储一次从机器发出的信号信息。集合中的每个文档都有设备SN代码和事件数组,它们遵循以下格式:

{
  "Device_SN": "ABCDE",
  "Event": [{
             "Code":  200,    
             "DTTM": ISODate("2018-08-21T15:46:50Z")
          },
      {
             "Code":  215,    
             "DTTM": ISODate("2018-08-21T15:46:50Z")
          }
   ] 

}

现在,我需要总结特定时间内每个设备的所有事件历史记录。查询结果的输出必须以表格格式包含device_sn,事件代码,事件开始时间,事件结束时间和持续时间。为此,我首先需要按Event.DTTM进行排序,然后将具有相同事件代码(或事件代码数组)的成功事件分组在一起。我猜想将需要一个额外的变量X,例如,只要事件代码在时间序列中改变并进一步按该变量分组,该变量X就会增加。

我的查询如下:

    db.event.aggregate( [

    { $unwind: "$Event"},
    { $match: { "Event.DTTM":{$gte:ISODate("2019-01-21T08:00:00Z"), $lt:ISODate("2019-01-21T20:00:00Z")} } },
    { $group: { _id:{dsn:"$Device_SN", Code:"$Event.Code"}, dsn:{$first:"$Device_SN"}, Event_Code:{$first:"$Event.Code"}, count:{$sum:1}, event_start_time:{$min:"$Event.DTTM"}, event_end_time:{$max:"$Event.DTTM"} } },
    { $sort: { _id:1, start_time:1}}

 ])

但是,这不是我想要的结果。事件代码在时间序列中更改后,应将事件分组。此外,事件的(end_time)应该是事件代码更改的时间。

我是MongoDB的新手。谁能给我正确的查询语句。任何帮助表示赞赏。非常感谢你。

0 个答案:

没有答案