PyMongo中正则不区分大小写查询无效如何解决
PyMongo实现不区分大小写正则匹配的正确写法
错误原因
你之前的写法将正则规则拼接为普通字符串传入查询条件,PyMongo不会自动将斜杠包裹的字符串解析为MongoDB正则语法,此时数据库会执行精确字符串匹配,只会查找cast字段值完全等于/john/i的记录,自然无法得到预期结果。
正确实现方案
有两种通用写法可以实现和Mongo shell中db.show_info.find({ 'cast': /john/i})完全一致的查询效果:
方法1:使用Python标准库
re模块编译正则
PyMongo会自动将Python编译后的正则对象转换为MongoDB可识别的正则查询规则,写法简洁:import re name = "john" # re.IGNORECASE 对应正则的i flag,即不区分大小写匹配 query = {"cast": re.compile(name, flags=re.IGNORECASE)} results = db.show_info.find(query)方法2:使用MongoDB原生
$regex操作符
显式调用MongoDB的正则查询操作符,通过$options参数指定不区分大小写规则,兼容性稳定:name = "john" query = { "cast": { "$regex": name, "$options": "i" # i代表不区分大小写,和shell中正则的/i作用完全一致 } } results = db.show_info.find(query)
两种写法效果完全一致,都会匹配cast字段中任意位置包含目标字符串(不区分大小写,可命中John、JOHN、john等各种大小写形式)的记录,按需选择即可。
内容的提问来源于stack exchange,提问作者Pedro Silva
相关产品推荐
相关产品推荐

