面试题答案
一键面试在MongoDB中,可以这样设计文档结构:
{
"name": "员工姓名",
"gender": "性别",
"department": "研发部",
"projects": [
{
"projectName": "项目名称1",
"startTime": "开始时间1",
"endTime": "结束时间1",
"status": "completed"
},
{
"projectName": "项目名称2",
"startTime": "开始时间2",
"endTime": "结束时间2",
"status": "inprogress"
}
]
}
查询语句如下:
db.employees.aggregate([
{
$match: {
department: "研发部",
"projects.status": "completed"
}
},
{
$addFields: {
completedProjectsCount: {
$size: {
$filter: {
input: "$projects",
as: "project",
cond: { $eq: ["$$project.status", "completed"] }
}
}
}
}
},
{
$sort: {
completedProjectsCount: -1
}
}
]);
- $match阶段:筛选出部门为“研发部”且至少有一个项目状态为“completed”的员工文档。
- $addFields阶段:使用$filter操作符和$size操作符计算每个员工参与的已完成项目数量,并将其添加为新字段
completedProjectsCount
。 - $sort阶段:按照
completedProjectsCount
字段降序排列,返回结果。