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 版本中解析日期?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 3.6 安装详解

将 Mongodb 从 3.2 升级到 3.6 时出错

Mongodb的安装

centos7 安装mongodb 3.6

centos6 7 yum安装mongodb 3.6

text 在Windows上安装MongoDB 3.6