如何在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}")
关键说明:
- 由于你的
date字段存储的是ISO格式字符串(yyyy-mm-dd),直接用字符串比较完全有效——这种格式的字典序和时间顺序完全一致 $gte和$lte会包含起始和结束日期的文档,若需要排除两端可改用$gt(大于)和$lt(小于)- 若需要对结果按日期排序,可在
find()后追加sort=[("date", 1)](升序)或sort=[("date", -1)](降序)
内容的提问来源于stack exchange,提问作者Filipe Varandas
相关产品推荐
相关产品推荐

