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

MongoDB查询:如何仅返回promotedtitles数组中匹配国家的子文档

MongoDB 嵌套数组按国家条件过滤子文档方案

问题原因

你之前使用promotedtitles.countries : {$in : ['US', 'CA']}的写法只能筛选出「promotedtitles数组中至少有一个子文档满足国家匹配条件」的顶层文档,无法过滤掉promotedtitles数组中不符合条件的子文档,自然达不到需求。

正确实现方案

使用MongoDB聚合管道的$filter操作符对promotedtitles数组做过滤即可,完整查询语句如下(示例传入参数为["GB", "CA"]):

db.你的集合名.aggregate([
  // 可选步骤:提前过滤掉完全没有符合条件子文档的顶层文档,减少计算量
  {
    $match: {
      "promotedtitles.countries": { $in: ["GB", "CA"] }
    }
  },
  // 核心步骤:过滤promotedtitles数组,仅保留符合条件的子文档
  {
    $project: {
      // 按需保留需要返回的顶层字段,不需要的可以删除或者设置为0
      name: 1,
      campaigntype: 1,
      startdate: 1,
      enddate: 1,
      active: 1,
      promotedtitles: {
        $filter: {
          input: "$promotedtitles",
          as: "item",
          // 判断子文档的国家数组和传入参数是否有交集
          cond: {
            $gt: [
              { $size: { $setIntersection: ["$$item.countries", ["GB", "CA"]] } },
              0
            ]
          }
        }
      }
    }
  }
])

使用说明

你只需要把上述代码中所有的["GB", "CA"]替换为你实际传入的国家参数即可,支持单元素数组(如["US"])、多元素数组(如["US", "CA"])两种形式,完全匹配你给出的三条匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:06:00