Mongoengine中实现Mongo Shell的$nin正则匹配问题求助
解决Mongoengine中$nin正则查询不生效的问题
嘿,我懂你遇到的困扰啦!你在Mongo Shell里写的{name:{$nin:[/ja/,/ra/]}}是用正则表达式对象来做匹配的,但你在Mongoengine里传的['/ja/','/ra/']是普通字符串,Mongoengine会把它们当成字面量去匹配,自然达不到你想要的过滤效果。
正确的实现方式
在Mongoengine中,你需要使用Python标准库re模块编译的正则表达式对象,来替代字符串形式的正则。具体代码如下:
import re # 替换成你实际的模型导入路径 from your_app.models import NameRecord # 用re.compile生成正则对象,r前缀避免转义字符干扰 namelist = NameRecord.objects(name__nin=[re.compile(r'ja'), re.compile(r'ra')])
补充说明
- 如果需要大小写不敏感的匹配,可以给
re.compile添加flags参数,比如:namelist = NameRecord.objects(name__nin=[ re.compile(r'ja', re.IGNORECASE), re.compile(r'ra', re.IGNORECASE) ]) - 这样写之后,Mongoengine会自动把Python的正则对象转换成MongoDB能识别的正则查询语法,和你在Mongo Shell里的效果完全一致。
内容的提问来源于stack exchange,提问作者Mahesh G
相关产品推荐
相关产品推荐

