You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyMongo中查询起始日期与结束日期之间的数据

解决方案:按日期范围查询MongoDB文档

要实现根据起始和结束日期查询中间的所有文档,你可以利用MongoDB的范围查询操作符 $gte(大于等于)和 $lte(小于等于)构造查询条件,同时使用 collection.find() 方法获取所有匹配文档(而非仅返回单个结果的 find_one())。

具体实现步骤:

  • 获取用户输入的起始日期与结束日期
  • 构建查询条件:{"date": {"$gte": start_date, "$lte": end_date}}
  • 通过 find() 执行查询,遍历游标处理每一条匹配的文档

修改后的完整代码示例:

import pymongo

# 连接数据库
uri = "mongodb://127.0.0.1:27017"
client = pymongo.MongoClient(uri)
database = client['db']
collection = database['currency']
collection2 = database['countries']

# 获取日期范围输入
start_date = input('Insert start date (yyyy-mm-dd): ')
end_date = input('Insert end date (yyyy-mm-dd): ')

# 查询日期范围内的所有文档
cursor = collection.find({"date": {"$gte": start_date, "$lte": end_date}})

# 遍历并打印查询结果
print("Currency rates in date range:")
for doc in cursor:
    print(f"Date: {doc['date']}, Base: {doc['base']}, BRL Rate: {doc['rates']['BRL']}")

# 保留你原有的国家相关计算逻辑
p = str(input('\nInsert a country: '))
if p == 'Brasil':
    item = collection2.find_one({"Country": p})
    aj = item['helpCost']
    firstCoin = item['LocalCoin']
    
    # 可选:获取日期范围内最新的汇率数据
    latest_rate_doc = collection.find_one(
        {"date": {"$lte": end_date}},
        sort=[("date", -1)]  # 按日期降序排序,取第一条即最新数据
    )
    secondCoin = latest_rate_doc['rates']['EUR']
    finalCoin = latest_rate_doc['rates'][firstCoin]
    
    res = (secondCoin / finalCoin)
    res2 = res * aj
    print(f"Calculated result for Brasil: {res2}")

关键说明:

  1. 由于你的date字段存储的是ISO格式字符串(yyyy-mm-dd),直接用字符串比较完全有效——这种格式的字典序和时间顺序完全一致
  2. $gte和$lte会包含起始和结束日期的文档,若需要排除两端可改用$gt(大于)和$lt(小于)
  3. 若需要对结果按日期排序,可在find()后追加sort=[("date", 1)](升序)或sort=[("date", -1)](降序)

内容的提问来源于stack exchange,提问作者Filipe Varandas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:19