假设你已经连接到了MongoDB,并且有一个名为collectionName的集合,包含了开始时间(startTime)和结束时间(endTime)这两个字段。

你可以使用以下代码实现该聚合查询:

db.collectionName.aggregate([
  {
    $project: {
      startTime: {
        $dateFromString: {
          dateString: "$startTime",
          format: "%Y-%m-%d %H:%M:%S"
        }
      },
      endTime: {
        $dateFromString: {
          dateString: "$endTime",
          format: "%Y-%m-%d %H:%M:%S"
        }
      },
      taskName: 1
    }
  },
  {
    $match: {
      $expr: {
        $gt: [{ $subtract: ["$endTime", "$startTime"] }, 60 * 60 * 1000]
      }
    }
  },
  {
    $group: {
      _id: "$taskName",
      count: { $sum: 1 },
      maxInterval: { $max: { $subtract: ["$endTime", "$startTime"] } },
      minInterval: { $min: { $subtract: ["$endTime", "$startTime"] } }
    }
  }
]);

这里的聚合查询包含三个阶段:

  1. $project阶段将开始时间和结束时间字段转换为日期类型,并保留任务名字段。
  2. $match阶段筛选出开始时间和结束时间相差大于一个小时的记录。
  3. $group阶段按照任务名分组,统计每个任务大于1小时的个数,并计算每个任务的最大时间间隔和最小时间间隔。

最终结果将返回每个任务的任务名(_id)、大于1小时的记录数量(count)、最大时间间隔(maxInterval)和最小时间间隔(minInterval

js 调用Mongo的聚合查询首先筛选出开始时间和结束时间这两个字段相差大于一个小时的记录其中的开始时间和结束时间都是yyyy-MM-dd HHmmss格式的字符串类型并按照任务名统计每个任务大于1小时的个数取出每个任务的最大时间间隔和最小时间间隔作为一个聚合查询返回最终结果返回

原文地址: https://www.cveoy.top/t/topic/hBPv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录