MongoDb:将日期字符串转换为MongoDb 3.6中的特定格式

MongoDb:将日期字符串转换为MongoDb 3.6中的特定格式,mongodb,mongoose,mongodb-query,aggregation-framework,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我需要将日期值解析为特定格式,而不使用dateFromString运算符中的format字段 当前情况: 在MongoDB4.0中,如果我使用下面的代码格式化dateString,它会给我提到的输出 parsedDate: { $dateFromString: { dateString: "$dateS", format: format: "%Y-%m-%dT%H" } } Output: "parsedDa

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

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

 parsedDate: {
        $dateFromString: {
          dateString: "$dateS",
          format: format: "%Y-%m-%dT%H"
        }
      }
Output: "parsedDate": ISODate("2020-01-16T08:00:00Z")
我无法在3.6中使用格式字段,因为它不受支持。 如何将日期转换为
格式:“%Y-%m-%dT%H”
在3.6中

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

输入:

[
  {
    "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"
          }
        }
      }
    }
  }
]);
[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "outputDate": ISODate("2020-01-16T08:00:00Z")
  }
]
查询:

[
  {
    "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"
          }
        }
      }
    }
  }
]);
[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "outputDate": ISODate("2020-01-16T08:00:00Z")
  }
]
O/p:

[
  {
    "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"
          }
        }
      }
    }
  }
]);
[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "outputDate": ISODate("2020-01-16T08:00:00Z")
  }
]

我认为以下查询将解决您的问题,因为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"
  }
]

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


从我收集的信息来看,您希望将mongodb版本3.6中的日期
ISODate(“2020-01-16T08:00:00Z”)
转换为-->
“2020-01-16T08”
正确吗?转换为-->2020-03-20T18:00:00Z这是否回答了您的问题?你不应该多次发布同一个问题,在更新你的问题时考虑(提供样本、期望等)和/或提供我同意@Valijon的赏金。理想情况下,人们可以增加更多的清晰度和细节的问题作为更新,以增加从社区的能见度,随后诉诸于一个小赏金,如果需要的话。让我知道发布的解决方案是否是你想要的?你的解决方案很好,也很简单,但由于某种原因,我的查询失去了分组。在Mongo游乐场看一看。请尝试此链接,忽略最后一个链接。