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

MongoDB正则匹配带括号的大小写不敏感全字符串问题问询

解决MongoDB正则全匹配含括号且忽略大小写的问题

你的问题核心在于正则中的特殊字符未转义,以及全匹配的正则写法不准确,我来一步步帮你修正:

问题分析

  1. 括号是正则元字符:你目标字符串里的(150 g Each)中的(和)在正则表达式里是用来定义分组的特殊字符,不转义的话MongoDB会把它们当作正则语法,而不是字面的括号,导致匹配失败。
  2. 全匹配的写法错误:你用了.*前后包裹,这会匹配包含目标字符串的任意内容,而不是完全等于目标字符串(仅大小写差异)。如果要全匹配,应该用^(字符串开头)和$(字符串结尾)来限定范围。

正确的查询方案

方案1:精确全匹配(忽略大小写)

这个方案会匹配name.en字段完全等于目标字符串(不管大小写)的记录,同时正确处理括号:

db.shop_items.findOne({
  'name.en': {
    $regex: '^Monginis Chocolate Muffins 6 N \\(150 g Each\\)$',
    $options: 'i'
  }
})
  • ^ 和 $ 确保整个字符串从开头到结尾完全匹配,不会匹配类似"Extra Monginis Chocolate Muffins 6 N (150 g Each)"这种包含目标字符串的更长内容。
  • \\( 和 \\) 是对括号的转义(MongoDB的字符串里需要双反斜杠来表示正则里的单个反斜杠)。
  • i 选项开启忽略大小写模式,处理大小写差异的情况。

方案2:正则字面量写法(更简洁)

你也可以直接用正则字面量,这样只需要单反斜杠转义括号:

db.shop_items.findOne({
  'name.en': /^Monginis Chocolate Muffins 6 N \(150 g Each\)$/i
})

如果你需要的是“包含匹配”(而非全匹配)

如果你的需求其实是匹配包含目标字符串(不管大小写和前后内容)的记录,只需要修正括号的转义即可:

db.shop_items.findOne({
  'name.en': {
    $regex: '.*Monginis Chocolate Muffins 6 N \\(150 g Each\\).*',
    $options: 'i'
  }
})

内容的提问来源于stack exchange,提问作者Ajay Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:41