以小时、分钟、秒为单位的平均间隔时间 Mongodb

Average interval time in Hrs, Minutes, seconds Mongodb

我正在尝试获取集合中所有文档的平均时间间隔。

我试图弄清楚的输出是这种格式平均:HH:MM:SS

它将计算每个文档的时间间隔,然后将其聚合以获得整个数据集的平均时间间隔。

这是示例数据。

{
    "_id" : ObjectId("60dc1e7d72296329347b2bbe"),
    "name": "firstupdate",
    "starttime" : ISODate("2021-06-30T07:38:06.926Z"),
    "endtime" : ISODate("2021-06-30T12:35:08.265Z"),
},
{
    "_id" : ObjectId("60dc1e7d72296329347b2bce"),
       "name": "secondupdate",
    "starttime" : ISODate("2021-07-29T07:41:06.926Z"),
    "endtime" : ISODate("2021-07-30T01:52:07.937Z"),
},
{
    "_id" : ObjectId("60dc1ff472d9f809d6d2f23e"),
      "name": "thirdupdate",
    "starttime" : ISODate("2021-07-15T07:43:06.926Z"),
    "endtime" : ISODate("2021-07-14T10:34:13.269Z"),
},
{
    "_id" : ObjectId("60dc204e03362e293a5f5014"),
        "name": "fourthupdate",
    "starttime" : ISODate("2021-07-21T05:11:23.654Z"),
    "endtime" : ISODate("2021-07-21T09:46:33.000Z"),
},
{
    "_id" : ObjectId("60dc21436a9e0e09f9a551ae"),
        "name": "fifthupdate",
    "starttime" : ISODate("2021-07-07T02:34:06.926Z"),
    "endtime" : ISODate("2021-07-07T08:11:06.926Z"),
},

提前致谢

你可以使用这个:

db.collection.aggregate([
   {
      $group: {
         _id: null,
         diff: {
            $avg: {
               $dateDiff: {
                  startDate: "$starttime",
                  endDate: "$endtime",
                  unit: "millisecond"
               }
            }
         }
      }
   },
   {
      $set: {
         diff: {
            $dateToString: {
               date: { $toDate: "$diff" },
               format: "%H:%M:%S"
            }
         }
      }
   }
])

可选择使用 format: "%j %H:%M:%S"%j 是一年中的第几天,即这将 return 有效输出长达一年。否则你需要一些日期数学。

Mongo Playground