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

如何在MongoDB Compass中编写不区分大小写的$in查询?

MongoDB $in 多值不区分大小写查询实现方法

你当前写的语句首先存在语法错误:$in 前多写了一层方括号,基础的正确$in查询格式应为 { category: { $in: ['a012','b23c','5870T'] } }。
针对不区分大小写的筛选需求,有两种可直接在MongoDB Compass中使用的实现方案:

方案1:$in 数组直接传入不区分大小写正则

实际上$in操作符支持传入正则表达式作为匹配条件,你只需要给每个待匹配值加上i(不区分大小写)修饰符即可,写法如下:

{
  category: {
    $in: [
      /^a012$/i,
      /^b23c$/i,
      /^5870T$/i
    ]
  }
}

正则前后添加^和$是为了保持和原字符串等值匹配一致的逻辑,即完整匹配字段值;如果需要模糊匹配包含目标值的内容,直接去掉这两个符号即可。

如果待匹配值包含.、*、?这类正则特殊字符,为了避免转义问题,可以用$regex显式声明匹配规则:

{
  category: {
    $in: [
      { $regex: '^a012$', $options: 'i' },
      { $regex: '^b23c$', $options: 'i' },
      { $regex: '^5870T$', $options: 'i' }
    ]
  }
}

方案2:基于Collation的不区分大小写查询(大数据量推荐)

正则匹配无法命中普通索引,集合数据量较大时查询性能很差。这种场景建议提前给category字段配置不区分大小写的排序规则(Collation):

  • 给category字段创建索引,索引Collation配置:locale设为对应业务语言(通用场景可设为simple),strength设为2(该级别匹配时会自动忽略大小写、重音符号差异)
  • 查询时在Compass的Collation配置项中填入和索引完全一致的规则,筛选栏直接写普通$in语句即可:
{ category: { $in: ['a012','b23c','5870T'] } }

该写法可以直接命中索引,查询性能远高于正则方案。

内容的提问来源于stack exchange,提问作者Vipul Prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:06:23