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

MongoDB 5中如何筛选匹配正则条件的所有子文档?

实现方案

你之前遇到$filter不支持$regex的问题,是因为$regex属于查询层运算符,无法直接在聚合表达式场景中使用,MongoDB 4.2及以上版本(包括你使用的MongoDB 5)提供了聚合专用的正则匹配运算符$regexMatch,配合$filter即可实现子文档数组的正则筛选。

完整查询示例

db.你的集合名.aggregate([
  // 第一步:先过滤出owner为Jim的文档,缩小计算范围,提升查询效率
  {
    $match: {
      owner: "Jim"
    }
  },
  // 第二步:过滤pets数组,仅保留符合正则条件的宠物
  {
    $project: {
      owner: 1, // 不需要返回owner字段可删除该行
      matchedPets: {
        $filter: {
          input: "$pets",
          as: "pet",
          cond: {
            $regexMatch: {
              input: "$$pet.name",
              regex: /^M/ // 匹配以M开头的正则规则,可按需修改
              // 如需忽略大小写,可追加配置:options: "i"
            }
          }
        }
      }
    }
  }
])

补充说明

  • 正则规则支持标准PCRE语法,比如匹配名字包含o可写为/o/,匹配名字以ky结尾可写为/ky$/
  • options可选参数支持正则修饰符:i忽略大小写、m多行匹配、x忽略空白字符、s允许.匹配换行符
  • 如果需要直接返回扁平化的宠物子文档列表,不需要嵌套在父文档结构中,可以在上述管道后追加两个阶段:
    // 展开匹配到的宠物数组
    { $unwind: "$matchedPets" },
    // 直接将宠物子文档作为返回结果
    { $replaceRoot: { newRoot: "$matchedPets" } }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:18:00