以下是使用JavaScript调用MongoDB的聚合查询,筛选出开始时间和结束时间相差大于一个小时的记录,并按任务名统计每个任务大于1小时的个数,同时取出每个任务的最大和最小时间间隔(以小时为单位)的聚合查询代码:

db.collection.aggregate([
  {
    $project: {
      taskName: 1,
      startTime: {
        $toDate: "$startTime"
      },
      endTime: {
        $toDate: "$endTime"
      }
    }
  },
  {
    $addFields: {
      timeDiff: {
        $divide: [
          {
            $subtract: ["$endTime", "$startTime"]
          },
          1000 * 60 * 60 // Convert milliseconds to hours
        ]
      }
    }
  },
  {
    $match: {
      timeDiff: { $gt: 1 }
    }
  },
  {
    $group: {
      _id: "$taskName",
      count: { $sum: 1 },
      maxInterval: { $max: "$timeDiff" },
      minInterval: { $min: "$timeDiff" }
    }
  }
])

上述代码中,假设你的集合名称为collection,开始时间字段为startTime,结束时间字段为endTime,任务名字段为taskName。首先使用$project阶段将开始时间和结束时间字段转换为Date类型,然后使用$addFields阶段计算时间间隔,并将时间间隔转换为小时。接下来使用$match阶段筛选出时间间隔大于1小时的记录。最后使用$group阶段按任务名进行分组,统计每个任务大于1小时的个数,并取出每个任务的最大和最小时间间隔。

注意:在实际应用中,需要将collection替换为你的实际集合名称,以及startTimeendTimetaskName替换为你的实际字段名称。另外,如果你的开始时间和结束时间字段不是字符串类型,而是Date类型,可以省略$toDate转换操作

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

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

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