mongoose MongoDB聚合-如何将时间字符串转换为ISO格式

9wbgstp7  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(115)

我收藏的所有文件都是这样的:

{
  "_id": {
    "$oid": "6396c58284bfad036f960288"
  },
  "title": "This is a nice title.",
  "time": "3266 sec"
}

字符串
但是我需要像这样转换time字段:

{
  "_id": {
    "$oid": "6396c58284bfad036f960288"
  },
  "title": "This is a nice title.",
  "time": "PT3266S"
}

xwbd5t1u

xwbd5t1u1#

  1. $set-设置time字段。使用$regexFind捕获匹配的组。
  2. $set-设置time字段。使用$concat将字符串与“PT”、time.captures数组的第一个元素和“S”连接。
db.collection.aggregate([
  {
    $set: {
      time: {
        $regexFind: {
          input: "$time",
          regex: "(\\d+) sec"
        }
      }
    }
  },
  {
    $set: {
      time: {
        $concat: [
          "PT",
          {
            $arrayElemAt: [
              "$time.captures",
              0
            ]
          },
          "S"
        ]
      }
    }
  }
])

字符串
Demo @ Mongo Playground
或者您可以将两个$set阶段合并为一个:

db.collection.aggregate([
  {
    $set: {
      time: {
        $concat: [
          "PT",
          {
            $arrayElemAt: [
              {
                $getField: {
                  field: "captures",
                  input: {
                    $regexFind: {
                      input: "$time",
                      regex: "(\\d+) sec"
                    }
                  }
                }
              },
              0
            ]
          },
          "S"
        ]
      }
    }
  }
])

相关问题