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

How to query a mongo collection having stored dates as strings of a certain format?

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

{
    "etd": "15-Mar-21"
}

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

的文档

谁能指导我如何编写 Mongo 查询?

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

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

上面将向每个文档添加一个字段 date(仅在查询期间),该字段将存储与其字符串表示形式相对应的 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