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

如何使用MongoDB查询筛选qty数组所有num均大于50的文档?

实现方法

可以通过MongoDB查询实现,以下是两种常用方法:

方法一:使用$not + $elemMatch直接查询

核心思路是排除所有包含qty.num ≤ 50元素的文档,剩下的就是所有qty.num都大于50的文档。

查询语句:

db.collection.find({
  qty: {
    $not: {
      $elemMatch: { num: { $lte: 50 } }
    }
  }
})

逻辑说明

  • $elemMatch: { num: { $lte: 50 } }:匹配数组中至少存在一个num小于等于50的文档
  • $not:对上述条件取反,即筛选出不存在任何num≤50的文档,也就是所有qty元素的num都大于50

方法二:使用聚合查询($expr + $allElementsTrue + $map)

通过聚合表达式逐元素验证条件,适合更复杂的数组判断场景。

聚合语句:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $allElementsTrue: {
          $map: {
            input: "$qty",
            as: "item",
            in: { $gt: ["$$item.num", 50] }
          }
        }
      }
    }
  }
])

逻辑说明

  • $map:遍历qty数组,对每个元素生成一个布尔值(num>50则为true,否则为false)
  • $allElementsTrue:判断上述生成的布尔数组是否全为true,即所有元素的num都大于50
  • $match:只保留满足上述条件的文档

验证结果

针对你提供的示例文档:

  • 文档xyz(_id:5234cc89...)和efg(_id:5234ccb7...)因存在num≤50的元素会被排除
  • 文档abc(_id:5234cc8a...)会被正常返回,符合你的期望结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:15:42