You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP+MongoDB实现按日期分组统计John的访问量

修正PHP+MongoDB实现按日期分组统计访问量(含0值日期)

原代码问题分析

  1. $group阶段使用_id: null会将所有匹配数据合并为单一分组,无法实现按日期拆分统计。
  2. 仅依赖聚合查询无法自动生成无访问记录的日期(即VISITS=0的情况),需额外处理日期范围补全。

修正后的完整代码

<?php
// 1. 聚合查询:获取John有访问记录的日期及对应访问量
$aggregatedData = $collection->aggregate([
    ['$match' => ['user' => 'john']],
    ['$group' => [
        '_id' => '$date', // 按date字段分组
        'VISITS' => ['$sum' => 1] // 统计每组记录数(即访问量)
    ]],
    ['$project' => [
        'DATE' => '$_id',
        'VISITS' => 1,
        '_id' => 0
    ]]
]);

// 2. 将聚合结果转为日期=>访问量的关联数组
$visitsMap = [];
foreach ($aggregatedData as $item) {
    $visitsMap[$item['DATE']] = $item['VISITS'];
}

// 3. 定义需要展示的日期范围(根据需求调整)
$startDate = new DateTime('2022-01-01');
$endDate = new DateTime('2022-01-05');

// 4. 遍历日期范围,输出每个日期的访问量(无记录则显示0)
$currentDate = clone $startDate;
while ($currentDate <= $endDate) {
    $dateStr = $currentDate->format('Y-m-d');
    $visits = $visitsMap[$dateStr] ?? 0;
    echo "DATE: {$dateStr} VISITS: {$visits}<br>";
    
    $currentDate->modify('+1 day');
}
?>

代码说明

  • 聚合阶段:通过$match筛选John的记录,$group按date字段分组统计访问量,$project调整输出字段格式。
  • 日期补全:手动生成目标日期范围,遍历每个日期时,从关联数组中读取对应访问量,无匹配则设为0,确保所有日期都被展示。

内容的提问来源于stack exchange,提问作者Łukasz Trześniewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:01:25