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
相关产品推荐
相关产品推荐

