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

MongoDB如何查询所有成绩全为A的学生文档?

如何查询MongoDB中所有成绩均为A的学生?

针对你提供的学生文档结构,要筛选出grades数组里所有子文档的grade字段均为'A'的学生,有两种实用的查询方式:

方法一:反向排除法(使用$not+$elemMatch)

通过排除存在非A成绩的文档,间接得到全A的学生:

db.students.find({
  grades: {
    $not: {
      $elemMatch: {
        grade: { $ne: 'A' }
      }
    }
  }
})

逻辑说明:$elemMatch: { grade: { $ne: 'A' } }会匹配数组中至少有一个成绩不是'A'的文档,加上$not后,就会筛选出所有没有非A成绩的学生,也就是全A的学生。

方法二:聚合管道验证法(使用$allElementsTrue+$map)

通过聚合管道对数组元素逐个验证,确保所有成绩都是'A':

db.students.aggregate([
  {
    $match: {
      $expr: {
        $allElementsTrue: {
          $map: {
            input: "$grades",
            as: "g",
            in: { $eq: ["$$g.grade", "A"] }
          }
        }
      }
    }
  }
])

逻辑说明:$map会遍历grades数组,将每个子文档转换为布尔值(判断grade是否等于'A'),$allElementsTrue则验证所有布尔值均为true,只有满足条件的文档会被保留。

关于你之前尝试的问题说明

  • $all用于匹配数组包含指定所有元素的场景,不适合嵌套文档的条件判断;
  • 单独使用$elemMatch: { grade: 'A' }只会匹配至少有一个A的文档,无法筛选全A的学生,因此需要用反向排除或聚合验证的方式实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:31