MST
星途 面试题库

面试题:MongoDB内嵌文档与数组结合之复杂条件嵌套查询

在上述students集合基础上,要求查询出年龄在22到25岁之间,并且至少有两门不同课程成绩都大于75分的学生文档,写出实现该查询的MongoDB语句,并解释语句中关键部分的作用。
16.9万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

假设students集合文档结构类似如下:

{
    "name": "张三",
    "age": 23,
    "scores": [
        { "course": "math", "score": 80 },
        { "course": "english", "score": 78 }
    ]
}

MongoDB查询语句如下:

db.students.find({
    age: { $gte: 22, $lte: 25 },
    scores: {
        $elemMatch: { score: { $gt: 75 } },
        $size: { $gte: 2 }
    }
});

关键部分作用解释:

  1. age: { $gte: 22, $lte: 25 }
    • $gte 表示大于等于,$lte 表示小于等于。此部分用于筛选出年龄在22到25岁之间(包含22和25)的学生。
  2. scores: { $elemMatch: { score: { $gt: 75 } }, $size: { $gte: 2 } }
    • $elemMatch: { score: { $gt: 75 } }
      • $elemMatch 操作符用于匹配数组中的元素。这里表示在scores数组中,至少有一个元素满足score大于75分。
    • $size: { $gte: 2 }
      • $size 操作符用于匹配数组的大小。这里表示scores数组的大小(即课程数量)大于等于2,确保至少有两门课程。

这样就可以查询出年龄在22到25岁之间,并且至少有两门不同课程成绩都大于75分的学生文档。