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

MongoDB正则查询如何实现不区分大小写匹配

实现MongoDB多字段忽略大小写搜索的方案

你不需要手动对字段做转小写操作,有两种成熟实现方式,优先选择第一种:

方案1:给正则匹配加大小写不敏感修饰符(推荐)

MongoDB原生正则支持i修饰符直接实现忽略大小写匹配,不需要额外做字段大小写转换,写法最简单,且可以直接命中字段上的普通索引,查询性能最优。
修改后的查询代码如下:

// 假设你的搜索关键词是变量keyword,建议提前做特殊字符转义避免正则注入
filter := bson.M{
    "$or": bson.A{
        bson.M{"title": bson.M{"$regex": keyword, "$options": "i"}},
        bson.M{"author": bson.M{"$regex": keyword, "$options": "i"}},
        bson.M{"content": bson.M{"$regex": keyword, "$options": "i"}},
    },
}
// 直接执行find查询即可
cur, err := p.postProposalCollection.Find(ctx, filter)

说明:$options: "i" 会让正则匹配自动忽略字段值和搜索词的大小写差异,完全覆盖你要的「转小写后匹配」的效果。

方案2:强制转字段为小写后做匹配(仅适合特殊定制场景)

如果你有特殊逻辑必须先把字段值统一转为小写再匹配,可以使用$expr聚合表达式配合$toLower字符串操作符实现,注意这种写法默认无法命中普通单字段索引,大数据量下性能较差。
示例代码如下:

import "strings"

// 提前把搜索关键词转为全小写
lowerKeyword := strings.ToLower(keyword)
filter := bson.M{
    "$expr": bson.M{
        "$or": bson.A{
            // 用$regexMatch做正则匹配,input传入转小写后的字段值
            bson.M{"$regexMatch": bson.M{"input": bson.M{"$toLower": "$title"}, "regex": lowerKeyword}},
            bson.M{"$regexMatch": bson.M{"input": bson.M{"$toLower": "$author"}, "regex": lowerKeyword}},
            bson.M{"$regexMatch": bson.M{"input": bson.M{"$toLower": "$content"}, "regex": lowerKeyword}},
        },
    },
}
cur, err := p.postProposalCollection.Find(ctx, filter)

内容的提问来源于stack exchange,提问作者Chau Loi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:51:26