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

如何在MongoDB中过滤包含对象的数组元素

MongoDB聚合过滤数组元素实现方案

你可以使用$filter操作符结合逻辑判断来实现数组元素的过滤,完整的聚合查询如下:

db.collection.aggregate([
  {
    $addFields: {
      arr: {
        $filter: {
          input: "$arr",
          cond: {
            $not: {
              $or: [
                { $in: ["000", "$this.a1.f1"] },
                { $eq: ["$this.a2.f1", "000"] }
              ]
            }
          }
        }
      }
    }
  }
])

关键逻辑说明

  • $addFields:保留文档原有所有字段,同时替换arr字段为过滤后的结果,避免丢失其他字段数据。
  • $filter:遍历arr数组的每个元素(用$this指代当前遍历到的元素),根据指定条件筛选元素。
  • 过滤条件解析:
    • $or 组合两个需要排除的条件:
      • $in: ["000", "$this.a1.f1"]:提取当前元素a1数组中所有f1的值组成新数组,判断"000"是否在该数组内(即a1包含f1="000"的元素)。
      • $eq: ["$this.a2.f1", "000"]:判断当前元素a2对象的f1值是否等于"000"。
    • $not 对$or的结果取反,最终只保留不满足任一排除条件的数组元素。

执行该聚合查询后,示例文档的arr数组将只保留符合要求的元素,与你期望的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:36:33