MST

星途 面试题库

面试题:MongoDB内嵌文档高级难度查询问题

有一个MongoDB集合存储员工信息,文档结构如下:{ '_id': ObjectId('64c3c0c9d5c09506559d955f'), 'employee_name': 'Bob', 'projects': [ { 'project_name': 'ProjectA', 'tasks': [ { 'task_name': 'Task1', 'completed': true }, { 'task_name': 'Task2', 'completed': false } ] }, { 'project_name': 'ProjectB', 'tasks': [ { 'task_name': 'Task3', 'completed': true } ] } ] } 。请查询出至少在一个项目中有两个及以上已完成任务的员工,写出查询语句。
32.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
db.collection('employees').find({
    "projects.tasks.completed": true
}, {
    "employee_name": 1,
    "projects": {
        $elemMatch: {
            "tasks": {
                $elemMatch: {
                    "completed": true
                }
            }
        }
    },
    _id: 0
}).match({
    "projects.tasks.completed": {
        $gte: 2
    }
});

上述代码中,假设集合名称为employees

  1. 首先使用find方法,筛选出至少有一个已完成任务的员工记录。这里使用$elemMatchprojects数组中的元素进行匹配,要求tasks数组中至少有一个任务的completedtrue
  2. 然后使用match方法,进一步筛选出在至少一个项目中有两个及以上已完成任务的员工。通过$gte操作符判断已完成任务的数量是否大于等于2 。

在实际应用中,请将collection('employees')中的employees替换为实际的集合名称。