【问题标题】:MongoDb: Convert date string to specific format in mongodb 3.6MongoDb:将日期字符串转换为 mongodb 3.6 中的特定格式
【发布时间】:2020-07-25 04:55:35
【问题描述】:

我需要将日期值解析为特定格式,而不使用 dateFromString 运算符中的格式字段。

Mongo Playground

现状: 在 Mongodb 4.0 中,如果我使用下面的代码格式化 dateString,它会给我提到的输出。

 parsedDate: {
        $dateFromString: {
          dateString: "$dateS",
          format: format: "%Y-%m-%dT%H"
        }
      }
Output: "parsedDate": ISODate("2020-01-16T08:00:00Z")

我不能在 3.6 中使用格式字段,因为它不受支持。 如何将我的日期转换为 format: "%Y-%m-%dT%H" 在 3.6 中?

【问题讨论】:

  • 据我所知,您希望将日期 ISODate("2020-01-16T08:00:00Z") 转换为此 --> "2020-01-16T08" 在 mongodb 版本 3.6 中正确吗?
  • 要转成这个----> 2020-03-20T18:00:00Z
  • 你不应该多次发布同一个问题,考虑更新你的问题(提供样本、期望等)和/或提供赏金
  • 我同意@Valijon。理想情况下,可以为问题添加更多的清晰度和细节作为更新,以提高社区的知名度,然后在需要时求助于小额赏金。让我知道发布的解决方案是否是您正在寻找的?

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

如果我的要求正确,请尝试使用以下查询:$dateFromParts

输入:

[
  {
    "date": ISODate("2020-01-16T08:54:17.604Z")
  }
]

查询:

db.collection.aggregate([
  {
    $project: {
      outputDate: {
        $dateFromParts: {
          "year": {
            $year: "$date"
          },
          "month": {
            $month: "$date"
          },
          "day": {
            $dayOfMonth: "$date"
          },
          "hour": {
            $hour: "$date"
          }
        }
      }
    }
  }
]);

O/P:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "outputDate": ISODate("2020-01-16T08:00:00Z")
  }
]

Playground Test Link

【讨论】:

【解决方案2】:

我认为以下查询将解决您的问题,因为 MongoDB 3.6 支持 dateFromString

输入:

[
  {
    "dateS": "2020-01-16T08"
  }
]

查询:

db.collection.aggregate([
  {
    "$project": {
      "year": {"$substr": ["$dateS",0,4]},
      "month": {"$substr": ["$dateS",5,2]},
      "day": {"$substr": ["$dateS",8,2]},
      "hour": {"$substr": ["$dateS",11,2]}
    }
  },
  {
    $addFields: {
      "isoString": {
        "$concat": ["$year","-","$month","-","$day","T","$hour",":00:00Z"]
      }
    }
  },
  {
    $addFields: {
      "newDate": {
        $dateFromString: {"dateString": "$isoString"}
      }
    }
  }
])

输出:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "day": "16",
    "hour": "08",
    "isoString": "2020-01-16T08:00:00Z",
    "month": "01",
    "newDate": ISODate("2020-01-16T08:00:00Z"),
    "year": "2020"
  }
]

【讨论】:

    【解决方案3】:

    这对我有用:我使用了 @ambienBeing 和 @techstack 的组合解决方案。谢谢

    Mongo playground

      "parsedDate": {
              "$dateFromParts": {
                "year": {
                  "$year": {
                    $dateFromString: {
                      dateString: {
                        "$concat": [
                          "$_id.dateHour",
                          ":00:00Z"
                        ]
                      }
                    }
                  }
                },
                "month": {
                  "$month": {
                    $dateFromString: {
                      dateString: {
                        "$concat": [
                          "$_id.dateHour",
                          ":00:00Z"
                        ]
                      }
                    }
                  }
                },
                "day": {
                  "$dayOfMonth": {
                    $dateFromString: {
                      dateString: {
                        "$concat": [
                          "$_id.dateHour",
                          ":00:00Z"
                        ]
                      }
                    }
                  }
                },
                "hour": {
                  "$hour": {
                    $dateFromString: {
                      dateString: {
                        "$concat": [
                          "$_id.dateHour",
                          ":00:00Z"
                        ]
                      }
                    }
                  }
                }
              }
            },
    

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2021-09-29
      • 2012-06-12
      • 1970-01-01
      • 2018-08-30
      • 2014-09-12
      相关资源
      最近更新 更多