Mongo的聚合查询

这篇博客详细记录了一次使用MongoDB进行数据分析的过程,涉及日志actionsContent集合中特定时间段内(2019年7月21日至28日)特定课程(558eefe6-55df-4ea5-86dd-6d5674257410)的访问情况。通过$match、$project、$group、$lookup和$unwind等操作,统计了每天的访问用户数,并进一步根据课程类别进行聚合,计算出每个类别的总访问用户数。最后,通过对课程类别与相关信息的联查,得到类别ID和对应的访问用户数,按照用户数降序排列,展示了数据分析的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

db.logActionsContent.aggregate([
    {
        $match: {
            'verb._id': 'http://e4e.deltaww.com/deltaknew/academy/verbs/opened',
            'object.extensions.type': 'activity',
            'object.extensions.courseId': '558eefe6-55df-4ea5-86dd-6d5674257410',
            timestamp: {
                $gte: ISODate("2019-07-21T00:00:00.000Z"),
                $lt: ISODate("2019-07-28T00:00:00.000Z")
            }
        }
    },
    {
        $project: {
            day: {
                $substr: ['$timestamp', 0, 10]
            },
            user_id: '$actor.extensions.userId',
            course_id: '$object.extensions.courseId'
        }
    },
    {
        $group: {
            _id: {
                day: '$day',
                course_id: '$course_id',
                
            },
            day: {
                $first: '$day'
            },
            course_id: {
                $first: '$course_id'
            },
            userIdSet: {
                $addToSet: '$user_id'
            },
            
        }
    },
    {
        $project: {
            _id: 1,
            day: 1,
            course_id: 1,
            day: 1,
            userCount: {
                $size: '$userIdSet'
            },
            
        }
    },
    {
        $group: {
            _id: '$course_id',
            course_id: {
                $first: '$course_id'
            },
            userCount: {
                $sum: '$userCount'
            },
            
        }
    },
    {
        $lookup: {
            from: "courseCatagoryMapping",
            localField: "course_id",
            foreignField: "courseId",
            as: "courseCatagoryMapping"
        }
    },
    {
        $unwind: {
            path: "$courseCatagoryMapping",
            preserveNullAndEmptyArrays: true,
            
        },
        
    },
    {
        $project: {
            _id: '$course_id',
            userCount: 1,
            catagoryId: '$courseCatagoryMapping.catagoryId',
            
        }
    },
    {
        $group: {
            _id: '$catagoryId',
            catagoryId: {
                $first: '$catagoryId'
            },
            userCount: {
                $sum: '$userCount'
            },
            
        }
    },
    {
        $sort: {
            userCount: - 1,
            catagoryId: - 1,
            
        }
    },
    {
        $lookup: {
            from: "categoryInformation",
            localField: "categoryId",
            foreignField: "categoryId",
            as: "categoryInformation"
        }
    },
    {
        $unwind: {
            path: "$categoryInformation",
            preserveNullAndEmptyArrays: true,
            
        },
    },
    
]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值