You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中查询包含特殊字符的不区分大小写匹配数据

问题根因

(、)属于正则表达式的特殊元字符,你直接写在$regex的查询字符串中时,会被MongoDB识别为正则分组标记,而非普通的括号文本进行匹配,因此无法命中目标数据。

实现方案

方案1:全匹配场景用精确查询(性能最优)

如果你只需要完全匹配目标文本,不需要模糊查询能力,直接用精确匹配即可,不需要用到正则:

db.collection.aggregate([
  {
    $match: {
      "categoryName": "categoryName (Special Box)"
    }
  }
])

方案2:正则模糊匹配+不区分大小写

如果需要模糊查询或者要求不区分大小写,有两种写法可选:

写法1:正则字面量写法(更简洁)

直接用正则字面量,对特殊字符加单反斜杠转义,末尾加i标记实现不区分大小写:

db.collection.aggregate([
  {
    $match: {
      "categoryName": { $regex: /categoryName \(Special Box\)/i }
    }
  }
])

写法2:字符串正则写法

如果用字符串形式传正则规则,需要加双反斜杠转义(JSON语法本身需要转义反斜杠),同时通过$options传i实现不区分大小写:

db.collection.aggregate([
  {
    $match: {
      "categoryName": {
        $regex: "categoryName \\(Special Box\\)",
        $options: "i"
      }
    }
  }
])

方案3:适配任意特殊字符的通用查询

如果查询关键词中可能包含任意正则特殊字符(包括但不限于. * + ? ^ $ { } ( ) | [ ] \ /),可以提前对关键词做统一转义处理,示例JS转义函数如下:

// 正则特殊字符转义函数
function escapeRegExp(keyword) {
  return keyword.replace(/[.*+?^${}()|[\]\\\/]/g, '\\$&');
}

// 调用示例
const searchKeyword = escapeRegExp("你要查询的带任意特殊字符的文本");
db.collection.aggregate([
  {
    $match: {
      "categoryName": {
        $regex: searchKeyword,
        $options: "i"
      }
    }
  }
])

内容的提问来源于stack exchange,提问作者prabhakar srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:03