如何在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
相关产品推荐
相关产品推荐

