MongoDB中如何判断某字段字符串值为另一字段的子串(不区分大小写)
方案1(适用于MongoDB 4.0及以上版本)
直接使用聚合操作符$regexMatch实现不区分大小写的字段间子串匹配:
db.test.aggregate([ { $match: { $expr: { $regexMatch: { input: "$Text", regex: "$Text1", options: "i" } } } } ])
参数说明:
$expr:支持在匹配条件中引用文档自身的字段值options: "i":开启正则匹配的不区分大小写规则
方案2(兼容MongoDB 4.0以下版本/避免正则特殊字符影响)
将两个字段统一转为小写后,通过位置查找判断是否包含对应子串:
db.test.aggregate([ { $match: { $expr: { $ne: [ { $indexOfBytes: [ { $toLower: "$Text" }, { $toLower: "$Text1" } ] }, -1 ] } } } ])
逻辑说明:
$toLower将两个字段的内容全部转为小写,实现不区分大小写的匹配前提$indexOfBytes返回子串首次出现的位置,返回值为-1代表不存在对应子串,不等于-1即代表匹配成功
注意事项
如果你的Text1字段可能包含.、*、+、?等正则特殊字符,优先使用方案2,避免方案1出现非预期的正则匹配结果。
内容的提问来源于stack exchange,提问作者Jay Park
相关产品推荐
相关产品推荐

