Python操作MongoDB查询无匹配结果时返回无匹配提示的方法
Python MongoDB电影查询新增无结果提示实现方案
现有逻辑问题
当前代码仅实现了命中结果时的遍历输出,未对空查询结果做处理,当无匹配数据时程序不会给出任何反馈,需要补充结果非空校验逻辑。
修改后可直接运行的完整代码
import sys from pymongo import MongoClient as mc from pymongo import ASCENDING as asc, DESCENDING as desc def get_coll(): try: server = mc("localhost", 27017) moviesdb = server.lab4 return moviesdb.movies except: return None moc = get_coll() if moc: print("Find Movies by") choice = input("1.Imdb ID\n" "2. Plot\n" "3. Stop Search\n" ) if choice == "1": imdb = input("Enter a IMDB ID: ") imdb_curs = moc.find({"imdb_id":imdb}, {"imdb_id":True, "title": True,"_id":False} ) imdp_list = list(imdb_curs) # 空结果判断 if not imdp_list: print("无匹配") else: for m in imdp_list: print(f"{m['imdb_id']} : {m['title']}") elif choice == "2": plot_word = input("Enter a search word for plot: ").lower() plot_curs = moc.find({"plot" : {"$regex" : plot_word }}, {"title" :True,"_id" :False}).sort("title",asc) plot_list = list(plot_curs) # 空结果判断 if not plot_list: print("无匹配") else: for p in plot_list: print(f"{p['title']}") else: sys.exit(0) else: print("Unable to Connect")
核心修改点
- 两个查询分支在将MongoDB游标转为结果列表后,新增空列表判断逻辑:如果列表长度为0(即无匹配数据),直接输出「无匹配」提示
- 仅当结果列表非空时,才遍历输出匹配到的电影内容
- 移除了原剧情查询分支中冗余的
filter(None, plot_curs)逻辑:pymongo的find()返回的游标仅包含匹配的有效文档,不存在空值需要过滤 - 修正了原剧情输出时多余的括号嵌套,保持代码格式简洁
内容的提问来源于stack exchange,提问作者Moayed Mahmoud
相关产品推荐
相关产品推荐

