I'm building regex queries for mongo
s_list = [f"/^.*{x}.*/i" for x in s_list]
print(s_list)
query: dict = resumes_collection.find({
"first_name": {
"$in": s_list
},
})
This regex is supposed to get all data regardless of case sensitivity
etc if we have loop in the database
if we enter ^.*OP.*/i or ^.*oO.*/i will return loop in either case
Currently this returns nothing.
https://www.mongodb.com/docs/manual/reference/operator/query/regex/
Docs for reference. Using motor to interact with mongodb, motor runs pymongo under the hood
CodePudding user response:
You can use
query: dict = resumes_collection.find({
"first_name": {
"$regex": re.compile("|".join(s_list), re.I)
},
})
Notes:
- The
[f"/^.*{x}.*/i" for x in s_list]generates a list of strings that are meant to be parsed as regex, but the$inoperator will treat them as strings /.../regex literal notation is not supported in Python, you need to define a regex object usingre.compile"|".join(s_list)generates a single pattern out of all thes_liststrings joining them with a|OR operator. You do not need to match the whole string, adding.*on both sides is not necessary and does more harm in fact.
