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

如何在MongoDB中查询min(arr)>10?解决dim_cm最小值>15的查询错误

MongoDB数组最小值条件查询解决方法

问题分析

你尝试用db.inventory.find( { dim_cm: { $all: {$gt:15} } } )查询dim_cm数组最小值大于15的文档,这个写法错误的原因是:$all的作用是匹配数组包含所有指定元素,而非判断数组中所有元素满足某个条件,无法实现“最小值大于15”的逻辑。

正确实现方式

1. 查询dim_cm数组最小值大于15的文档

使用$expr结合聚合函数$min,直接计算数组最小值并比较,逻辑更直观:

db.inventory.find({
  $expr: { $gt: [ { $min: "$dim_cm" }, 15 ] }
})

执行后会返回item: "planner"的文档,因为它的dim_cm数组最小值22.85大于15,其他文档的数组最小值均≤15。

2. 通用实现min(arr) > N的查询

如果要实现任意数组的最小值大于指定数值(比如min(dim_cm) > 10),只需修改$gt的第二个参数即可:

db.inventory.find({
  $expr: { $gt: [ { $min: "$dim_cm" }, 10 ] }
})

这个查询会返回除item: "postcard"外的所有文档(postcard的dim_cm最小值为10,不满足“大于10”的条件)。

另一种等价写法(判断所有元素大于指定值)

如果需求是“数组中所有元素都大于N”(和min(arr) > N逻辑等价),也可以用$not+$elemMatch实现:

// 对应min(dim_cm) >15
db.inventory.find({
  dim_cm: { $not: { $elemMatch: { $lte: 15 } } }
})

这个写法的逻辑是:筛选出不存在任何元素≤15的文档,效果和$expr+$min一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:01:14