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

MongoDB聚合查询中如何添加数组长度限制?

问题解决方法

你的问题出在两个地方:

  • $match阶段语法错误:常规查询条件里不能直接把{$size:"$reviews"}作为键,必须用$expr包裹聚合表达式才能使用$size;
  • 聚合管道阶段写法错误:你把$match和$project放到了同一个阶段对象中,每个聚合阶段必须是独立的对象。

下面是两种正确的实现方式:

方式一:用$expr结合$size判断数组长度

db.films.aggregate([
    {
        $match: {
            $expr: { $gte: [ { $size: "$reviews" }, 3 ] }
        }
    },
    {
        $project: {
            title: 1,
            reviewavg: { $round: [ { $avg: "$reviews.rating" }, 2 ] }
        }
    }
])

方式二:利用数组索引判断(性能更优)

如果reviews字段有索引,这种方式能直接利用索引查询,效率更高——数组索引从0开始,只要存在reviews.2这个元素,就说明数组长度至少为3:

db.films.aggregate([
    {
        $match: {
            "reviews.2": { $exists: true }
        }
    },
    {
        $project: {
            title: 1,
            reviewavg: { $round: [ { $avg: "$reviews.rating" }, 2 ] }
        }
    }
])

内容的提问来源于stack exchange,提问作者D. Rattansingh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:09