首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDb:在MongoDB3.6中将日期字符串转换为特定格式

MongoDb:在MongoDB3.6中将日期字符串转换为特定格式
EN

Stack Overflow用户
提问于 2020-04-12 23:55:32
回答 3查看 438关注 0票数 1

我需要在不使用dateFromString运算符中的format字段的情况下将日期值解析为特定格式。

Mongo Playground

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

代码语言:javascript
复制
 parsedDate: {
        $dateFromString: {
          dateString: "$dateS",
          format: format: "%Y-%m-%dT%H"
        }
      }
Output: "parsedDate": ISODate("2020-01-16T08:00:00Z")

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

EN

回答 3

Stack Overflow用户

发布于 2020-04-13 00:56:44

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

输入:

代码语言:javascript
复制
[
  {
    "date": ISODate("2020-01-16T08:54:17.604Z")
  }
]

查询:

代码语言:javascript
复制
db.collection.aggregate([
  {
    $project: {
      outputDate: {
        $dateFromParts: {
          "year": {
            $year: "$date"
          },
          "month": {
            $month: "$date"
          },
          "day": {
            $dayOfMonth: "$date"
          },
          "hour": {
            $hour: "$date"
          }
        }
      }
    }
  }
]);

O/P:

代码语言:javascript
复制
[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "outputDate": ISODate("2020-01-16T08:00:00Z")
  }
]

Playground Test Link

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 02:06:52

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

输入:

代码语言:javascript
复制
[
  {
    "dateS": "2020-01-16T08"
  }
]

查询:

代码语言:javascript
复制
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"}
      }
    }
  }
])

输出:

代码语言:javascript
复制
[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "day": "16",
    "hour": "08",
    "isoString": "2020-01-16T08:00:00Z",
    "month": "01",
    "newDate": ISODate("2020-01-16T08:00:00Z"),
    "year": "2020"
  }
]
票数 1
EN

Stack Overflow用户

发布于 2020-04-13 03:07:06

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

Mongo playground

代码语言:javascript
复制
  "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"
                    ]
                  }
                }
              }
            }
          }
        },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61174221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档