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

MongoDB如何查询所有嵌套子属性都匹配过滤条件的嵌入文档

MongoDB嵌套数组全匹配查询方案

核心需求说明

你需要筛选data数组中满足 bets子数组所有元素的exchange字段都等于指定值 的嵌套对象,原有基础查询只能匹配存在至少一个符合条件的元素,无法满足「全匹配」要求,也无法过滤data数组内的元素。

实现代码

使用MongoDB聚合管道实现,完整查询代码如下:

// 替换collection为你的实际集合名
db.collection.aggregate([
  // 拆分data数组,将每个嵌套元素转为独立文档方便过滤
  { $unwind: "$data" },
  // 过滤符合条件的data元素:bets数组不存在exchange不等于'Smarkets'的元素
  {
    $match: {
      "data.bets": {
        $not: {
          $elemMatch: {
            exchange: { $ne: "Smarkets" }
          }
        }
      }
    }
  },
  // 可选步骤:如果需要将符合条件的data重新组合为数组,保留原文档结构,添加以下配置
  {
    $group: {
      _id: "$_id",
      sport: { $first: "$sport" },
      site: { $first: "$site" },
      data: { $push: "$data" }
    }
  }
])

逻辑说明

  • 核心过滤采用反向排除思路:只要bets数组中存在任意一个exchange不等于目标值的元素,就排除该data对象,剩下的自然就是所有bets都满足条件的对象,刚好匹配你要求的仅返回_id为'2'的嵌套对象的需求。
  • 如果你只需要获取符合条件的data嵌套对象,不需要保留原文档结构,可以省略最后一步$group,查询结果会直接返回符合要求的data独立文档。
  • 如果需要适配不同的exchange过滤值,只需要替换$ne对应的对比值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03