如何用pymongo查询含Date.now()时间戳的MongoDB集合指定日期范围数据
解决方法
你只需要先把指定的起止日期转换成对应1970年1月1日UTC至今的毫秒级时间戳,再和createdby.$numberLong字段做范围匹配即可,具体操作步骤和示例代码如下:
- 第一步:导入需要的依赖模块pymongo和datetime
- 第二步:将你需要查询的起止日期转换为毫秒级时间戳,注意如果是本地时间建议转成UTC时间避免时区偏差
- 第三步:构造pymongo查询条件,用
$gte(大于等于)和$lte(小于等于)匹配时间范围
from pymongo import MongoClient from datetime import datetime # 建立MongoDB连接 client = MongoClient('你的MongoDB连接串') db = client['你的数据库名'] collection = db['foo_collection'] # 定义要查询的起止日期,此处示例为2021-11-01到2021-11-10的范围,可按需修改 start_date = datetime(2021, 11, 1, 0, 0, 0) end_date = datetime(2021, 11, 10, 23, 59, 59) # 转换为毫秒级时间戳,再转成字符串和$numberLong的存储格式匹配 start_ts = str(int(start_date.timestamp() * 1000)) end_ts = str(int(end_date.timestamp() * 1000)) # 构造查询条件 query = { "createdby.$numberLong": { "$gte": start_ts, "$lte": end_ts } } # 执行查询获取结果 results = list(collection.find(query)) # 可打印结果验证 for doc in results: print(doc)
注意:如果你的查询日期带时区,构造datetime对象时需要指定tzinfo参数为对应时区,避免转换出来的时间戳出现偏差,导致查询结果不符合预期。如果存储的createdby时间戳本身是UTC时间,转换查询日期时也建议用UTC时间构造datetime对象。
内容的提问来源于stack exchange,提问作者souparno majumder
相关产品推荐
相关产品推荐

