如何从mongodb中的HH:MM:SS字符串时间值聚合mins数据

如何从mongodb中的HH:MM:SS字符串时间值聚合mins数据,mongodb,aggregate,Mongodb,Aggregate,我有以下格式的mongodb集合中的文档,我希望聚合到特定的时间范围,比如5分钟、10分钟、15分钟等。集合详细信息如下 { "_id" : ObjectId("603a7aec21a87324e49f7ce1"), "Time" : "10:15:00", "Rate" : "3250" }, { "_id" : ObjectId("603a7a

我有以下格式的mongodb集合中的文档,我希望聚合到特定的时间范围,比如5分钟、10分钟、15分钟等。集合详细信息如下

{
"_id" : ObjectId("603a7aec21a87324e49f7ce1"),
"Time" : "10:15:00",
"Rate" : "3250"
},
{
"_id" : ObjectId("603a7aec21a87324e49f7ce1"),
"Time" : "10:17:22",
"Rate" : "3250"
}

非常感谢您的建议……

您应该将日期/时间值存储为字符串,这是一个设计缺陷。始终使用适当的
日期
对象。这同样适用于数值

看看这个解决方案

var span = 1000 * 60 * 5 // => 5 Minutes
db.collection.aggregate([
   // Convert time strings to 'Date' values
   {
      $set: {
         date: { $regexFindAll: { input: "$Time", regex: /\d+/ } }
      }
   },
   {
      $set: {
         date: {
            $dateFromParts: {
               year: 1970, month: 1, day: 1,
               hour: { $toInt: { $arrayElemAt: ["$date.match", 0] } },
               minute: { $toInt: { $arrayElemAt: ["$date.match", 1] } },
               second: { $toInt: { $arrayElemAt: ["$date.match", 2] } }
            }
         }
      }
   },
   // Create the interval
   {
      $set: {
         interval: {
            $dateFromParts: {
               year: 1970, month: 1, day: 1,
               millisecond: { $multiply: [span, { $trunc: { $divide: [{ $toLong: "$date" }, span] } }] },
            }
         }
      }
   },
   // Group by interval
   { $group: { _id: "$interval", Rate: { $sum: "$Rate" } } }
])

欢迎使用Stack Overflow,阅读此链接后,请更新您的问题,并提供更多详细信息,1)您的样本收集详细信息无效,请更新有效的json格式,2)到目前为止您尝试了什么?3) 尝试失败的地方?请提供一些有效的输入示例数据。这不是任何收集数据:ObjectId(“603a7aec21a87324e49f7ce1”),“时间”:“10:13:00”,“速率”:“2000.75”,}{“_id”:ObjectId(“603a7aec21a87324e49f7ce1”),“时间”:“10:13:12”,“速率”:“2000.75”,}谢谢@wernfried domscheit,这对我很有效。我还将尝试更改集合中时间字段的数据类型。