在 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 运算符连接它们。你不需要匹配整个字符串,在两边都添加 .* 是没有必要的,而且实际上更有害。