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

如何通过正则匹配pName和pCode检索产品并返回product数组指定字段

实现方案

你可以使用MongoDB的聚合管道完成该需求,核心思路是先筛选包含符合条件产品的父文档,再根据输出格式要求选择对应处理逻辑。


方案1:输出独立的产品文档(符合条件的产品单独成条)

如果需要把匹配到的所有产品拆成独立条目返回,仅保留指定字段,参考代码如下(示例条件为匹配pName包含jeans、pCode包含J,返回pName/pCode/pPrice三个字段):

db.collection.aggregate([
  // 第一步:提前过滤无符合条件产品的文档,缩小查询范围
  {
    $match: {
      $or: [
        { "product.pName": { $regex: /jeans/, $options: "i" } },
        { "product.pCode": { $regex: /J/, $options: "i" } }
      ]
    }
  },
  // 第二步:拆分product数组,把每个产品转化为独立文档
  { $unwind: "$product" },
  // 第三步:精准匹配单个产品的正则规则
  {
    $match: {
      $or: [
        { "product.pName": { $regex: /jeans/, $options: "i" } },
        { "product.pCode": { $regex: /J/, $options: "i" } }
      ]
    }
  },
  // 第四步:指定返回字段,不需要的字段设为0即可
  {
    $project: {
      _id: 0,
      pName: "$product.pName",
      pCode: "$product.pCode",
      pPrice: "$product.pPrice"
    }
  }
])

方案2:保留原文档结构,仅过滤数组内符合条件的产品

如果需要保留原文档的层级结构,只剔除product数组中不符合条件的元素,参考代码如下:

db.collection.aggregate([
  // 第一步:提前过滤无符合条件产品的文档
  {
    $match: {
      $or: [
        { "product.pName": { $regex: /jeans/, $options: "i" } },
        { "product.pCode": { $regex: /J/, $options: "i" } }
      ]
    }
  },
  // 第二步:过滤product数组中不符合规则的元素
  {
    $addFields: {
      product: {
        $filter: {
          input: "$product",
          cond: {
            $or: [
              { $regexMatch: { input: "$$this.pName", regex: /jeans/, options: "i" } },
              { $regexMatch: { input: "$$this.pCode", regex: /J/, options: "i" } }
            ]
          }
        }
      }
    }
  },
  // 第三步:指定返回字段
  {
    $project: {
      _id: 0,
      "product.pName": 1,
      "product.pCode": 1,
      "product.pPrice": 1
    }
  }
])

参数说明

  • 正则配置的$options: "i"表示忽略大小写,不需要可直接删除
  • 如果需要同时满足pName和pCode的正则条件,把查询条件中的$or改为$and即可
  • 可根据实际需求调整$project配置,新增/删减需要返回的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:45:02