在 mongodb 中将正则表达式与 $in 运算符组合
Combining regex with $in operator in mongodb
我正在为 mongo
构建正则表达式查询
s_list = [f"/^.*{x}.*/i" for x in s_list]
print(s_list)
query: dict = resumes_collection.find({
"first_name": {
"$in": s_list
},
})
这个正则表达式应该获取所有数据,而不考虑大小写敏感度
等等 如果我们在数据库中有 loop
如果我们输入 ^.*OP.*/i
或 ^.*oO.*/i
将 return loop
在任何一种情况下
目前这个 return 什么都没有。
https://www.mongodb.com/docs/manual/reference/operator/query/regex/
文档供参考。使用电机与 mongodb 交互,电机在后台运行 pymongo
您可以使用
query: dict = resumes_collection.find({
"first_name": {
"$regex": re.compile("|".join(s_list), re.I)
},
})
备注:
[f"/^.*{x}.*/i" for x in s_list]
生成一个字符串列表,这些字符串将被解析为正则表达式,但 $in
运算符会将它们视为字符串
/.../
Python 不支持正则表达式文字符号,您需要使用 re.compile
定义正则表达式对象
"|".join(s_list)
从所有 s_list
字符串中生成一个模式,用 |
OR 运算符连接它们。你不需要匹配整个字符串,在两边都添加 .*
是没有必要的,而且实际上更有害。
我正在为 mongo
构建正则表达式查询 s_list = [f"/^.*{x}.*/i" for x in s_list]
print(s_list)
query: dict = resumes_collection.find({
"first_name": {
"$in": s_list
},
})
这个正则表达式应该获取所有数据,而不考虑大小写敏感度
等等 如果我们在数据库中有 loop
如果我们输入 ^.*OP.*/i
或 ^.*oO.*/i
将 return loop
在任何一种情况下
目前这个 return 什么都没有。
https://www.mongodb.com/docs/manual/reference/operator/query/regex/
文档供参考。使用电机与 mongodb 交互,电机在后台运行 pymongo
您可以使用
query: dict = resumes_collection.find({
"first_name": {
"$regex": re.compile("|".join(s_list), re.I)
},
})
备注:
[f"/^.*{x}.*/i" for x in s_list]
生成一个字符串列表,这些字符串将被解析为正则表达式,但$in
运算符会将它们视为字符串/.../
Python 不支持正则表达式文字符号,您需要使用re.compile
定义正则表达式对象
"|".join(s_list)
从所有s_list
字符串中生成一个模式,用|
OR 运算符连接它们。你不需要匹配整个字符串,在两边都添加.*
是没有必要的,而且实际上更有害。