如何查询将日期存储为某种格式的字符串的 mongo 集合?

Posted

技术标签:

【中文标题】如何查询将日期存储为某种格式的字符串的 mongo 集合?【英文标题】:How to query a mongo collection having stored dates as strings of a certain format? 【发布时间】:2021-06-12 08:49:16 【问题描述】:

我有一个 mongo 集合,该集合中的每个文档都有一个格式如下的日期字符串:


    "etd": "15-Mar-21"

我只想查询和检索此集合中日期大于或等于 15-Mar-21 的文档。

谁能指导我,我可以如何编写一个 Mongo 查询?

【问题讨论】:

【参考方案1】:

使用聚合首先使用 $dateFromString 指令将字段添加到具有转换日期的所有文档。


    $addFields: 
      date: 
        $dateFromString: 
          dateString: "$etd"
        
      
    
  

上面将为每个文档添加一个字段date(仅在查询期间),该字段将存储与其字符串表示对应的日期对象。所以"15-Mar-21"会变成ISODate("2021-03-15T00:00:00Z")

然后只需使用$match 来匹配date 大于给定日期的所有文档。所以这里是完整的聚合:

db.collection.aggregate([
  
    $addFields: 
      date: 
        $dateFromString: 
          dateString: "$etd"
        
      
    
  ,
  
    $match: 
      date: 
        $gt: ISODate("2021-03-15T00:00:00Z")
      
    
  
])

游乐场:https://mongoplayground.net/p/LSHcukh05jk

【讨论】:

以上是关于如何查询将日期存储为某种格式的字符串的 mongo 集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongo 聚合将字符串转换为日期?

如何使用 Mongo 存储库两次查询同一字段?

如何在mongo聚合不起作用的情况下将字符串转换为日期总是返回null?

将SQL查询出的日期更改格式

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]

在插入 mongo 查询到 java 代码期间使用 ISODate 函数将数据字符串转换为 Date 格式