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

MongoDB多字段分组统计:统计content.A/C值频次并取Top5(PHP示例)

PHP MongoDB 查询示例:统计content.A与content.C字段值的出现次数并取Top5

要实现你需要的统计需求,我们可以利用MongoDB的聚合框架来完成,下面是完整的PHP代码示例,我会一步步拆解逻辑:

核心思路

  1. 使用$project阶段把content.A和content.C合并成一个统一的数组,过滤掉不存在的字段值
  2. 使用$unwind展开这个数组,让每个值单独成为一条文档
  3. 使用$group按值分组,统计每个值的出现次数
  4. 使用$sort按次数倒序排列结果
  5. 使用$limit筛选出Top5的统计结果

完整代码示例

<?php
// 连接MongoDB服务
$client = new MongoDB\Client("mongodb://localhost:27017");
// 替换成你的数据库名和集合名
$collection = $client->your_database_name->your_collection_name;

// 构建聚合查询管道
$pipeline = [
    // 第一步:整合A和C字段的值,过滤掉null(即字段不存在的情况)
    [
        '$project' => [
            'values' => [
                '$filter' => [
                    'input' => [['val' => '$content.A'], ['val' => '$content.C']],
                    'cond' => ['$ne' => ['$$this.val', null]]
                ]
            ]
        ]
    ],
    // 第二步:展开数组,每个值单独成文档
    ['$unwind' => '$values'],
    // 第三步:按值分组统计次数
    [
        '$group' => [
            '_id' => '$values.val',
            'count' => ['$sum' => 1]
        ]
    ],
    // 第四步:按次数倒序排序
    ['$sort' => ['count' => -1]],
    // 第五步:取Top5结果
    ['$limit' => 5]
];

// 执行聚合查询
$results = $collection->aggregate($pipeline);

// 遍历输出结果
foreach ($results as $item) {
    echo "{$item->_id}: {$item->count}" . PHP_EOL;
}
?>

代码细节说明

  • $filter的作用是排除字段不存在的情况,避免把null值统计进去
  • $unwind是聚合中常用的操作,能把数组拆分成独立文档,确保每个值都能被单独计数
  • 你可以根据实际需求调整输出格式,比如把结果转成JSON格式或者存入数组中

运行这段代码后,就能得到你期望的统计结果:a:2、c:1(如果有其他值,会按出现次数从高到低取前5)

内容的提问来源于stack exchange,提问作者Lamyee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:03