mongo 聚合查询以查找在每种类型的连续记录之间具有给定时间差的记录

问题描述 投票:0回答:0

我每 2-3 秒收集一次来自 gps 设备的数据记录,数据样本如下所示

  1. {imei:123456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  2. {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  3. {imei:123456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  4. {imei:323456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  5. {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  6. {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  7. {imei:323456.., port:8000,cretedon:timestamp, updatedon: timestamp} ...大约 20 亿条记录 我的要求是创建聚合查询以查找所有 imeis,其中 2 个连续记录之间的时间差 >= 特定日期时间的给定时间(以分钟为单位)。 比如 imei 223456.. 以上记录如下
  • 一个。 {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  • b。 {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}
  • c。 {imei:223456.., port:8000,cretedon:timestamp, updatedon : timestamp}

如果在给定的日期时间考虑这些记录,则 时间差异 b.cretedon - a.cretedon => 类似地说 2 分钟 c.cretedon - b.cretedon = 3 分钟

如果给定时间是3分钟那么imei 223456..被认为有匹配的时差记录,否则从输出中删除。

我试过如下查询,但没有给出正确的结果

`collection
.aggregate([
            {
               $match: {
                  "createdon": // filter out all items that are inside a range 
                     {$gte: start_dt, $lte: end_dt}
               }
            },
            {
               $group: {
                  _id: "$imei", max_time: {$max: "$createdon"}, min_time: {$min: "$createdon"}
               }
            },
            {
               $set: {
                  difference: {$divide: [{$subtract: ["$max_time", "$min_time"]}, 60 * 1000]}// get difference in minutes
               }
            },
            {
               $match: {// filter out all items that are having difference >= 3 min or any given time
                  difference: {$gte: minutes}
               }
            }
         ]);` 

请求参数 start_dt= new Date('02-24-2023').getTime(), end_dt= new Date('02-25-2023').getTime() 和 time diff minutes = 3 ,结果我应该获取那些任何 2 个连续记录差异超过给定时间 3 分钟的所有 IMEIs

mongodb time aggregate difference group
© www.soinside.com 2019 - 2024. All rights reserved.