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

Python使用pymongo读取MongoDB仅首个pin校验生效是什么问题

代码问题分析
  • 核心逻辑缺陷:for循环只要匹配到第一条不相符的pin,就会直接执行sys.exit(0)终止程序,完全不会遍历后续存储的第二条数据。输入2222时,第一次循环会先匹配到第一条存储的1111,匹配失败后程序直接退出,因此永远不会判断到第二条的2222记录。
  • 冗余无效代码:else分支中的login_data != item['pin']是无意义的比较表达式,既没有赋值操作也没有逻辑判断作用,属于冗余代码。
修复方案

有两种优化方式,第一种是修正原有遍历逻辑,第二种是直接利用MongoDB查询能力提升效率:

方式1:修正遍历逻辑

import pymongo
import sys

cluster = pymongo.MongoClient("mongodb://localhost:27017/")
db = cluster['test']
collection = db['test']

login_data = int(input("Enter the pin:"))
result  = collection.find({})
login_success = False

for item in result:
    if login_data == item['pin']:
        print("Login successfully")
        login_success = True
        break

# 遍历完全部数据后再判断是否匹配失败
if not login_success:
    print("Invalid pin")
    sys.exit(0)

方式2:直接查询匹配记录(更高效)

不需要全表遍历所有数据,直接向MongoDB查询是否存在对应pin的记录即可,性能更优:

import pymongo
import sys

cluster = pymongo.MongoClient("mongodb://localhost:27017/")
db = cluster['test']
collection = db['test']

login_data = int(input("Enter the pin:"))
# 直接查询是否存在对应pin的记录
match_item = collection.find_one({"pin": login_data})

if match_item:
    print("Login successfully")
else:
    print("Invalid pin")
    sys.exit(0)

内容的提问来源于stack exchange,提问作者Joy Chakraborty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:57:04