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

Python操作MongoDB实现地址文本搜索、评分筛选并按匹配分排序求助

修正后的可运行Python代码
from pymongo import MongoClient

# 请根据你的实际MongoDB配置修改连接参数
client = MongoClient('mongodb://localhost:27017/')
# 替换为你实际使用的数据库名称
db = client['your_database_name']
restaurant = db['restaurant']

# 用户输入处理
mytext = input("请输入需要在address字段搜索的字符串:\n")
# 将输入的最低评分转为浮点型,匹配集合内rating字段的数值类型
minrating = float(input("请输入最低评分要求:\n"))

# 为address字段创建文本索引,重复创建不会报错,已创建可删除该行
restaurant.create_index([('address', 'text')])

# 构造查询条件
query_params = {
    "$text": {"$search": mytext},
    "rating": {"$gte": minrating}
}
# 构造返回字段规则,仅返回名称、菜系、匹配得分
return_fields = {
    "_id": 0,
    "name": 1,
    "type_of_food": 1,
    "score": {"$meta": "textScore"}
}

# 执行查询并按得分降序排序
query_result = restaurant.find(query_params, return_fields).sort([("score", {"$meta": "textScore"})])

# 遍历打印结果
for item in query_result:
    print(item)

核心修改说明

  • 输入的最低评分默认是字符串格式,转换为浮点型后才能和集合中数值类型的rating字段做大小比较
  • 原代码用and拼接两个查询字典的写法错误,多条件查询需要将所有过滤规则放在同一个查询字典中
  • MongoDB操作符(如$text、textScore)需要加引号作为Python字典的字符串键,否则会触发语法报错
  • 投影配置中明确指定返回需求要求的餐厅名称、菜系字段,同时隐藏不必要的_id字段
  • 修正了排序方法的写法,pymongo中按文本匹配得分排序需要传入[('score', {'$meta': 'textScore'})]格式的参数

内容的提问来源于stack exchange,提问作者Prakash Reghate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:54:03