Mongo 查询在给定日期范围之间搜索,而日期作为字符串存储在数据库中

Sra*_*van 5 mongodb mongodb-query

我的数据库架构具有字符串日期格式(“date”:“2020-09-01 16:07:45”)。我需要在给定的日期范围之间进行搜索,我知道如果我们使用 ISO 日期格式这是可能的,但我不确定我们是否可以使用字符串形式的日期格式进行查询。

我尝试了以下查询,它似乎没有显示准​​确的结果。

db.daily_report_latest.find({"date":{$gte: "2021-01-01 00:00:00", $lte:"2021-03-01 00:00:00"}},{"date":1})
Run Code Online (Sandbox Code Playgroud)

有什么替代方案吗?感谢你的帮助。

Pur*_*jax 2

因此,在这两种解决方案中,首先将date数据库中的字段类型转换为日期,然后将其与输入日期范围进行比较。

解决方案#1:对于 MongoDB 版本 >= 4.0,使用$toDate

db.daily_report_latest.find(
    {
        $expr: {
            $and: [
                { $gte: [{ $toDate: "$date" }, new Date("2021-01-01 00:00:00")] },
                { $lte: [{ $toDate: "$date" }, new Date("2021-03-01 00:00:00")] }
            ]
        }
    },
    { "date": 1 }
)
Run Code Online (Sandbox Code Playgroud)

解决方案#2:对于 MongoDb 版本 >= 3.6 使用$dateFromString

db.daily_report_latest.find(
    {
        $expr: {
            $and: [
                { $gte: [{ $dateFromString: { dateString: "$date" }}, new Date("2021-01-01 00:00:00")] },
                { $lte: [{ $dateFromString: { dateString: "$date" }}, new Date("2021-03-01 00:00:00")] }
            ]
        }
    },
    { "date": 1 }
)

Run Code Online (Sandbox Code Playgroud)