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

如何将MongoDB变量与通配符结合实现参数化查询

你写法运行失败的核心原因是,将正则规则拼接成了普通字符串,MongoDB查询时不会将包裹在引号里的"/xxx/"识别为正则表达式,只会作为完全匹配的普通字符串处理,因此无法命中符合包含规则的文档。

使用JavaScript原生的RegExp构造函数动态生成正则对象即可解决问题,以下是不同场景的实现代码:

场景1:保留原$in写法(适配后续多子串匹配需求)

key_sub_string = "2021-08-01_2021-08-11_Reported";
// RegExp第二个参数可传入匹配标志,如"i"代表忽略大小写,无特殊需求可省略
const matchRule = new RegExp(key_sub_string);
db.getCollection('df_FI').find({
  $and: 
    [
      {key:{"$in":[matchRule]}}
    ]
})

场景2:仅需匹配单个子串(简化写法)

如果不需要同时匹配多个子串,可直接省略$in和$and,写法更简洁:

key_sub_string = "2021-08-01_2021-08-11_Reported";
db.getCollection('df_FI').find({
  key: new RegExp(key_sub_string)
})

注意事项

如果你的子串中包含正则特殊字符(如. * + ? ^ $ { } ( ) | [ ] \等),需要先对特殊字符做转义处理,避免出现正则语法错误,可调用以下工具函数转义:

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

key_sub_string = "2021-08-01_2021-08-11_Reported";
const matchRule = new RegExp(escapeRegExp(key_sub_string));
db.getCollection('df_FI').find({
  key: matchRule
})

内容的提问来源于stack exchange,提问作者Peter Lucas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:33:04