我如何使用 pymongo 通过单个请求找到最近的日期?日期应该最接近当前日期
How I can find closest date by single request using pymongo? Date should be closest to Current Date
数据集:
{"_id":{"$oid":"61e038a052124accf41cb5e4"},"event_date":{"$date":{"$numberLong":"1642204800000"}},
"name":"UFC Fight Night","event_url":"https://www.tapology.com/fightcenter/events/82805-ufc-fight-night","location":"Las Vegas, NV"}
{"_id":{"$oid":"61e038a252124accf41cb5e5"},"event_date":{"$date":{"$numberLong":"1642809600000"}},"name":"UFC 270","event_url":"https://www.tapology.com/fightcenter/events/82993-ufc-270","location":"Anaheim, CA"}
{"_id":{"$oid":"61e038a252124accf41cb5e6"},"event_date":{"$date":{"$numberLong":"1644019200000"}},"name":"UFC Fight Night","event_url":"https://www.tapology.com/fightcenter/events/83125-ufc-fight-night","location":"Las Vegas, NV"}
我正在使用 python,这意味着我无法在 Mongo 数据库的代码中使用 $commands 来查找我需要的集合。问题是如何找到日期时间值最接近当前日期的对象。据我了解,我必须使用 python 的 datetime.now() 来设置当前日期并进行比较($currentDate 不适用于 Python)。但是但是为了比较值,我必须反序列化对象,这看起来很重。默认情况下 Mongo 使用 ISO 日期时间类型。
你能帮助我吗?至少让我走上正确的方向?
这是一个聚合解决方案
db.collection.aggregate([
{
"$addFields": {
"dateDiff": {
"$abs": {
"$subtract": [
"$event_date",
{
"$literal": new Date()
}
]
}
}
}
},
{
"$sort": {
"dateDiff": 1
}
}
])
- 我用
$subtract
来区别今天event_date
$abs
就是要有绝对值。拥有最亲近的未来或过去。
- 然后我们只需要按
dateDiff
排序
在您的代码中,您必须替换 new Date()
试一试here
数据集:
{"_id":{"$oid":"61e038a052124accf41cb5e4"},"event_date":{"$date":{"$numberLong":"1642204800000"}},
"name":"UFC Fight Night","event_url":"https://www.tapology.com/fightcenter/events/82805-ufc-fight-night","location":"Las Vegas, NV"}
{"_id":{"$oid":"61e038a252124accf41cb5e5"},"event_date":{"$date":{"$numberLong":"1642809600000"}},"name":"UFC 270","event_url":"https://www.tapology.com/fightcenter/events/82993-ufc-270","location":"Anaheim, CA"}
{"_id":{"$oid":"61e038a252124accf41cb5e6"},"event_date":{"$date":{"$numberLong":"1644019200000"}},"name":"UFC Fight Night","event_url":"https://www.tapology.com/fightcenter/events/83125-ufc-fight-night","location":"Las Vegas, NV"}
我正在使用 python,这意味着我无法在 Mongo 数据库的代码中使用 $commands 来查找我需要的集合。问题是如何找到日期时间值最接近当前日期的对象。据我了解,我必须使用 python 的 datetime.now() 来设置当前日期并进行比较($currentDate 不适用于 Python)。但是但是为了比较值,我必须反序列化对象,这看起来很重。默认情况下 Mongo 使用 ISO 日期时间类型。
你能帮助我吗?至少让我走上正确的方向?
这是一个聚合解决方案
db.collection.aggregate([
{
"$addFields": {
"dateDiff": {
"$abs": {
"$subtract": [
"$event_date",
{
"$literal": new Date()
}
]
}
}
}
},
{
"$sort": {
"dateDiff": 1
}
}
])
- 我用
$subtract
来区别今天event_date
$abs
就是要有绝对值。拥有最亲近的未来或过去。- 然后我们只需要按
dateDiff
排序
在您的代码中,您必须替换 new Date()
试一试here