“想要转换”;00:10:00“;到mongodb中的单个整数

“想要转换”;00:10:00“;到mongodb中的单个整数,mongodb,aggregation,procedure,Mongodb,Aggregation,Procedure,集合中有许多文档包含此字段时间:“00:10:00” 我想总结一下所有的文档,并在mongodb robo3T中给出一个整数 这适用于以下文件: [ { timeTaken: "00:10:00" }, { timeTaken: "01:10:00" }, { timeTaken: "02:20:50" } ] 我希望结果是: { timeTaken: "03:40:50" } 我们的策略是将字符串分

集合中有许多文档包含此字段
时间:“00:10:00”

我想总结一下所有的文档,并在mongodb robo3T中给出一个整数

这适用于以下文件:

[
  { timeTaken: "00:10:00" },
  { timeTaken: "01:10:00" },
  { timeTaken: "02:20:50" }
]
我希望结果是:

{ timeTaken: "03:40:50" }

我们的策略是将字符串分为
分钟
小时
,将它们转换为数字,求和,然后重建结构

为此,您需要访问诸如和之类的运算符,这意味着您只能在版本4.0+上执行此操作,而对于较旧的Mongo版本,您必须阅读文档并在代码中执行此操作

我已经将下面的查询分为多个阶段,这样可以更清楚地了解我在做什么,但这可以被重新编写为两个阶段,
$group
阶段和最终的
$project
阶段来重新构造数据

db.collection.aggregate([
  {
    "$addFields": {
      dataParts: {
        $map: {
          input: {
            $split: [
              "$data",
              ":"
            ]
          },
          as: "num",
          in: {
            "$toInt": "$$num"
          }
        }
      },
      
    }
  },
  {
    $group: {
      _id: null,
      seconds: {
        $sum: {
          "$arrayElemAt": [
            "$dataParts",
            2
          ]
        }
      },
      minutes: {
        $sum: {
          "$arrayElemAt": [
            "$dataParts",
            1
          ]
        }
      },
      hours: {
        $sum: {
          "$arrayElemAt": [
            "$dataParts",
            0
          ]
        }
      },
      
    }
  },
  {
    "$addFields": {
      finalSeconds: {
        $mod: [
          "$seconds",
          60
        ]
      },
      
    }
  },
  {
    $addFields: {
      minutes: {
        $sum: [
          "$minutes",
          {
            "$divide": [
              {
                "$subtract": [
                  "$seconds",
                  "$finalSeconds"
                ]
              },
              60
            ]
          }
        ]
      },
      
    }
  },
  {
    $addFields: {
      finalMinutes: {
        $mod: [
          "$minutes",
          60
        ]
      },
      finalHours: {
        $sum: [
          "$hours",
          {
            $mod: [
              {
                $max: [
                  {
                    "$subtract": [
                      "$minutes",
                      60
                    ]
                  },
                  0
                ]
              },
              60
            ]
          }
        ]
      }
    }
  },
  {
    $project: {
      final: {
        $concat: [
          {
            "$toString": "$finalHours"
          },
          ":",
          {
            "$toString": "$finalMinutes"
          },
          ":",
          {
            "$toString": "$finalSeconds"
          },
          
        ]
      }
    }
  }
])

是否要将其更改为
10
?将
00:00:12
更改为什么?什么是
12:11:10
?您好,我想添加两个格式相同的字段00:10:00,00:00:12..如何将两个字段添加到相同的格式您必须在示例输入和预期输出中进行编辑。我不确定您当前想要的是什么您好,集合的每个文档中都有一个字段..00:10:00类似于此,这是执行任务所需的时间..所以我想从集合中添加所有这种格式的字段,所以我猜它是HH:MM:SS格式?