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

MongoDB聚合阶段如何筛选布尔数组不含false值的文档

问题场景

现有MongoDB集合文档结构示例如下:

[
    {
        _id: 132143124,
        orders: [true, false, false],
    },
    {
        _id: 3123,
        orders: [true, true, true],
    },
];

需求:基于MongoDB聚合管道实现查询,仅返回orders数组中不存在false值的文档。

聚合实现方案

以下两种聚合写法都可满足需求,针对上述示例数据,两种写法都会过滤掉_id: 132143124的文档,仅返回全为true值的_id: 3123文档:

  • 写法1:$elemMatch搭配$not操作符
    该写法直接在$match阶段通过原生数组查询规则过滤,不需要调用聚合表达式,查询性能更优:

    db.你的实际集合名.aggregate([
      {
        $match: {
          orders: {
            // 规则:orders数组中不存在任何等于false的元素
            $not: { $elemMatch: { $eq: false } }
          }
        }
      }
    ])
    
  • 写法2:$expr搭配$allElementsTrue聚合表达式
    如果你需要在聚合阶段叠加更多字段计算、逻辑判断规则,可以使用聚合表达式的写法:

    db.你的实际集合名.aggregate([
      {
        $match: {
          $expr: {
            // 规则:orders数组内所有元素均为真值
            $allElementsTrue: "$orders"
          }
        }
      }
    ])
    

补充场景适配:如果业务要求orders数组非空、且所有元素均为true,可以追加数组长度判断,参考代码如下:

db.你的实际集合名.aggregate([
  {
    $match: {
      $expr: {
        $and: [
          { $gt: [{ $size: "$orders" }, 0] },
          { $allElementsTrue: "$orders" }
        ]
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:12:25