当我在 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()}});
任何有帮助的建议!!
这里的挑战是您的日期和时间存储为字符串,而不是以易于比较的格式。为了执行您想要的查询,我们需要将日期和时间字符串拼凑成一个 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 年。如果您的收藏跨越多年,可能需要进行调整。