当日期和时间在不同键的字符串中时,Mongo 查询过滤今天的数据

问题描述 投票:0回答:1

当我在 mongo 中的 json 对象中的字符串中有日期和时间时,如何编写 mongo 查询来过滤今天的记录和时间。

我的 Json 对象是

{
  "_id": ""
  "data_id": 3227,
  "series_id": 240,
  "date_wise": "17 Sep 2023, Sunday",
  "match_date": "17-Sep",
  "match_time": "01:30 PM",
}

我需要通过比较 json 对象中的 match_date 和 match_time 键来确定以下日期是否是当前日期/时间。

我已经编写了查询,但它不起作用,因为我相信 json 对象日期和时间是字符串。

db.posts.find({match_date: {$lt: new Date()},match_time: {$lt: new Date()}});

任何有帮助的建议!!

mongodb mongodb-query
1个回答
0
投票

这里的挑战是您的日期和时间存储为字符串,而不是以易于比较的格式。为了执行您想要的查询,我们需要将日期和时间字符串拼凑成一个 Date 对象以进行比较。

这是执行此操作的一种方法:

使用 $dateFromString 运算符将日期和时间的字符串表示形式转换为单个 Date 对象。

使用 $expr 运算符形成一个条件,可以将这个新创建的 Date 对象与当前日期和时间进行比较。

以下是编写此查询的方法:

db.posts.find({
    $expr: {
        $lt: [
            {
                $dateFromString: {
                    dateString: {
                        $concat: [
                            { $substr: ["$match_date", 0, 2] }, 
                            " ", 
                            { $substr: ["$match_date", 3, 3] }, 
                            " 2023 ", 
                            { $substr: ["$match_time", 0, 5] }, 
                            ":00"
                        ]
                    },
                    format: "%d %b %Y %H:%M:%S"
                }
            },
            new Date()
        ]
    }
});

此查询执行以下操作:

将日期和时间字符串连接成适合 $dateFromString 的格式。

使用 $dateFromString 将此连接字符串转换为 Date 对象。 将此 Date 对象与当前日期和时间进行比较。

注意:此方法假设所有记录的年份均为 2023 年。如果您的收藏跨越多年,可能需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.