python - 基于数据的 Python Mongo 过滤器
问题描述
我正在尝试使用日期过滤 mongo 数据。
为此,我正在使用这些数据集:
def mongo_db(mydict):
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient[<Db name>]
mycol = mydb[<Collection name>]
# mydict = {}
x = mycol.insert_one(mydict)
# print(x.inserted_id)
return x.inserted_id
for i in range(1,6):
mydict = {
"startsAt": {
"time": {
"date": datetime.datetime.today() - timedelta(days = i) + timedelta(hours = i)
},
"valid": True
}
}
我正在尝试从上面的代码示例中过滤某些日期,生成数据,例如:
"2021-02-09T13:56:09.963000Z"
"2021-02-09T13:56:09.963001Z"
我希望我的结果就像 2021-02-09 然后只过滤那个。
当我使用此代码时:
filterCondition = {
"startsAt.time.date" : { "$lt" : datetime.datetime.today()},
"startsAt.time.date" : { "$gt" : datetime.datetime.today() - timedelta(days=1)}
}
mycol.find(filterCondition)
我得到了今天:
"2021-02-10T00:31:47.411000Z"
我只需要过滤昨天和后天的日期。
我试过这种格式:
from_dt = datetime.datetime.strptime('2021-02-10','%Y-%m-%d')
#from_dts = datetime.utcfromtimestamp(from_dt)
to_dt = datetime.datetime.strptime('2021-02-08','%Y-%m-%d')
但没有运气,所以我需要昨天的 24 小时全天结果。我对日期时间感到困惑昨天会是什么?含义如果我有记录:
"2021-02-09T13:56:09.963000Z"
"2021-02-09T13:56:09.963001Z"
"2021-02-09T13:56:09.963002Z"
.....
那我只想要这个日期 2021-02-09
解决方案
如果您使用本地 BSON 日期,则所有日期都存储为 UTC;因此,如果您想从昨天的 UTC 00:00 搜索到今天的 UTC 00:00,请使用:
today = datetime.date.today()
yesterday = datetime.date.today() - datetime.timedelta(days=1)
start = datetime.datetime.combine(yesterday, datetime.time(0, 0)).replace(tzinfo=pytz.utc)
end = datetime.datetime.combine(today, datetime.time(0, 0)).replace(tzinfo=pytz.utc)
print(list(db.mycollection.find({'date': {'$gte': start, '$lt': end}})))
推荐阅读
- elasticsearch - Kibana 中 logstash 监控的主机名不正确
- javascript - Ant Design 表格搜索定制
- jenkins - 如何在 Jenkins 管道中获取 SonarQube 项目 URL?
- reactjs - “setInterval”中的函数不接收来自钩子的更新变量
- linux-kernel - 杀死线程后清理
- c# - 运行包装在我的 winforms aspnet 中的外部 exe 时出错
- angular - 角度日期管道月份值错误
- css - Bootstrap 登录颜色组件
- java - Toolbar SDK 29 中未显示菜单项
- json - 如何读取多个json文件