MongoDB:如何在 3.6 mongoDb 版本中解析日期?
Posted
技术标签:
【中文标题】MongoDB:如何在 3.6 mongoDb 版本中解析日期?【英文标题】:MongoDB: how to parse date in 3.6 mongoDb version? 【发布时间】:2020-07-24 16:56:49 【问题描述】:我在这里创建了Mongo Playground
当前输出显示基于 15 分钟时间间隔的结果。 (将 updatedAt 值按 15 分钟分组并显示某些字段的平均值)
目前 $dateToString 和 $dateFromString 正在使用格式来解析日期。 我需要让它适用于 mongo 3.6 版(3.6 不支持 $dateFromString 的格式)
parsedDate:
$dateFromString:
dateString: "$_id.dateHour",
format: "%Y-%m-%dT%H"
如果我从 $dateToString 和 $dateFromString 中删除格式字段,查询仍会运行,但“dateHour”的输出显示的值与预期不同。 (如下)
"dateHour": ISODate("2020-03-20T18:46:50Z"),
3.6 不支持格式字段。必须使此查询与 3.6 版本兼容。 最终输出没有变化。
主要焦点是在此更改后获得相同的“dateHour”值。
当前输出:
"dateHour": ISODate("2020-03-19T18:30:00Z"),
预期输出:
"dateHour": ISODate("2020-03-19T18:30:00Z"),
【问题讨论】:
嗯,当前输出和预期输出有什么区别?,它们是一样的 没有区别。输出应该保持不变,但查询应该是 3.6.. 当前查询使用 dateFromString 运算符中的格式字段,Mongod v 3.6 不支持该字段 急于寻求帮助 【参考方案1】:使用$dateToParts 及其对应的$dateFromParts
这是更新后的Playground
它所做的基本上是将日期分解为多个部分:
$project:
dateHour:
$dateToParts:
date: "$updatedAt"
会产生:
"dateHour":
"day": 19,
"hour": 18,
"millisecond": 0,
"minute": 21,
"month": 3,
"second": 5,
"year": 2020
然后你从它的部分重建日期:
$project:
reconstructedDateHour:
$dateFromParts:
year: "$dateHour.year",
month: "$dateHour.month",
day: "$dateHour.day",
hour: "$dateHour.hour"
【讨论】:
以上是关于MongoDB:如何在 3.6 mongoDb 版本中解析日期?的主要内容,如果未能解决你的问题,请参考以下文章