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

如何用PyMongo对MongoDB中字符串类型数值执行范围查询?

MongoDB 范围查询实现方案

首先纠正你代码里的一个笔误:文档中的嵌套字段是p1,但你写的是pl,这会导致查询不到数据,先把这个错误修正。

接下来针对你的范围查询需求,分两种情况给出解决方案:

情况1:字符串格式的数值(固定两位小数)

因为你的温度、湿度都是字符串类型,且格式统一为两位小数,直接用MongoDB的比较操作符$gt(大于)和$lt(小于)就能实现范围查询:

# 构建查询条件:温度在(10.00,16.00),湿度在(20.00,69.99)
query = {
    "p1.Temperature": {"$gt": "10.00", "$lt": "16.00"},
    "p1.Humidity": {"$gt": "20.00", "$lt": "69.99"}
}

# 直接统计符合条件的文档数量,比循环计数高效
counter = collection.count_documents(query)
print(counter)

情况2:更稳妥的数值类型查询(避免字符串格式问题)

如果存在字符串格式不统一的情况(比如有的值是"10"而不是"10.00"),字符串比较会出错。这时可以用$toDouble将字符串转换为数值后再做比较(需要MongoDB 4.0及以上版本支持):

from pymongo import MongoClient

# 连接数据库(替换成你的实际连接信息)
client = MongoClient("mongodb://localhost:27017/")
db = client.your_database_name
collection = db.your_collection_name

# 使用聚合管道实现类型转换+范围过滤+计数
pipeline = [
    {
        "$match": {
            "$expr": {
                "$and": [
                    {"$gt": [{"$toDouble": "$p1.Temperature"}, 10.00]},
                    {"$lt": [{"$toDouble": "$p1.Temperature"}, 16.00]},
                    {"$gt": [{"$toDouble": "$p1.Humidity"}, 20.00]},
                    {"$lt": [{"$toDouble": "$p1.Humidity"}, 69.99]}
                ]
            }
        }
    },
    {"$count": "total_matching_docs"}
]

# 执行聚合并获取结果
result = list(collection.aggregate(pipeline))
counter = result[0]["total_matching_docs"] if result else 0
print(counter)

长期优化建议

把数据库中p1.Temperature和p1.Humidity字段的类型改成数值类型(比如double),这样不仅查询更高效,还能彻底避免字符串格式带来的各种问题。修改字段类型可以用以下聚合管道:

# 将字符串类型的温度、湿度转为double类型
collection.update_many(
    {},
    [
        {
            "$set": {
                "p1.Temperature": {"$toDouble": "$p1.Temperature"},
                "p1.Humidity": {"$toDouble": "$p1.Humidity"}
            }
        }
    ]
)

修改完成后,就可以直接用数值做范围查询了:

query = {
    "p1.Temperature": {"$gt": 10.00, "$lt": 16.00},
    "p1.Humidity": {"$gt": 20.00, "$lt": 69.99}
}
counter = collection.count_documents(query)
print(counter)

内容的提问来源于stack exchange,提问作者kavita k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:06:25