面试题答案
一键面试db.employees.aggregate([
{
$unwind: "$projects"
},
{
$group: {
_id: "$employee_id",
name: { $first: "$name" },
projectCount: { $sum: 1 },
totalDuration: { $sum: { $subtract: ["$projects.end_date", "$projects.start_date"] } }
}
},
{
$match: {
projectCount: { $gte: 3 },
averageDuration: { $gt: 90 }
}
},
{
$addFields: {
averageDuration: { $divide: ["$totalDuration", "$projectCount"] }
}
},
{
$project: {
_id: 0,
employee_id: "$_id",
name: 1,
projectCount: 1,
averageDuration: 1
}
}
]);
以上代码以 MongoDB 为例进行聚合操作:
$unwind
展开projects
数组,以便后续对每个项目进行操作。$group
按employee_id
分组,统计每个员工参与项目的数量projectCount
以及所有项目总持续时间totalDuration
。$addFields
计算平均项目持续时间averageDuration
。$match
筛选出参与至少3个项目且平均持续时间超过90天的员工。$project
输出需要的字段,隐藏_id
字段,显示employee_id
、name
、projectCount
和averageDuration
。
请注意,实际代码可能需要根据你使用的数据库及具体数据情况进行调整。