MST

星途 面试题库

面试题:MongoDB聚合框架在复杂日志分析中的应用

给定一个MongoDB日志集合,日志文档有'timestamp'(格式为ISODate)、'service'(服务名称)、'operation'(操作名称)、'duration'(操作耗时,单位毫秒)字段。要求使用聚合框架查询出每个服务中,昨天耗时最长的前5个操作及其平均耗时,昨天的定义为当前日期的前一天。
47.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
// 获取昨天的日期
const today = new Date();
const yesterday = new Date(today);
yesterday.setDate(yesterday.getDate() - 1);
const startOfYesterday = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());
const endOfYesterday = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate() + 1);

db.logs.aggregate([
    {
        $match: {
            timestamp: {
                $gte: startOfYesterday,
                $lt: endOfYesterday
            }
        }
    },
    {
        $group: {
            _id: {
                service: "$service",
                operation: "$operation"
            },
            totalDuration: { $sum: "$duration" },
            count: { $sum: 1 }
        }
    },
    {
        $addFields: {
            averageDuration: { $divide: ["$totalDuration", "$count"] }
        }
    },
    {
        $sort: {
            "_id.service": 1,
            averageDuration: -1
        }
    },
    {
        $group: {
            _id: "$_id.service",
            topOperations: {
                $push: {
                    operation: "$_id.operation",
                    averageDuration: "$averageDuration"
                }
            }
        }
    },
    {
        $addFields: {
            topOperations: {
                $slice: ["$topOperations", 5]
            }
        }
    }
]);