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

MongoDB聚合查询问题:移除hour分组字段并合并重复keywordid

解决MongoDB聚合查询中重复keywordid的问题

问题核心是你在第二次分组时错误引用了不存在的字段,且多余的$push和$unwind操作导致重复条目。以下是修正后的聚合代码,直接实现按特定时段筛选后,合并同一keywordid的总点击量与平均RPC,且无重复条目的需求:

db.getCollection("yahoohourlyquick").aggregate([
    // 1. 基础条件筛选
    {
        "$match": {
            "pid": {"$in": [759]},
            "date": {"$gte": new ISODate('2024-03-29')},
            "clicks": {"$gt": 0},
            "graphdata": {"$regex": "^rs-"}
        }
    },
    // 2. 按小时、PID、keywordid分组,计算每小时的点击量总和与RPC平均值
    {
        "$group": {
            "_id": {
                "hour": {"$hour": "$date"},
                "pid": "$pid",
                "keywordid": "$graphdata"
            },
            "hourly_clicks": {"$sum": "$clicks"},
            "hourly_rpc": {"$avg": "$cpc"}
        }
    },
    // 3. 筛选目标时段(1/2/3点)且该小时点击量≥10的记录
    {
        "$match": {
            "_id.hour": {"$in": [1,2,3]},
            "hourly_clicks": {"$gte": 10}
        }
    },
    // 4. 按PID、keywordid合并,计算总点击量与平均RPC
    {
        "$group": {
            "_id": {
                "pid": "$_id.pid",
                "keywordid": "$_id.keywordid"
            },
            "total_clicks": {"$sum": "$hourly_clicks"},
            "avg_rpc": {"$avg": "$hourly_rpc"}
        }
    },
    // 5. 格式化输出,去掉_id字段
    {
        "$project": {
            "_id": 0,
            "pid": "$_id.pid",
            "keywordid": "$_id.keywordid",
            "clicks": "$total_clicks",
            "rpc": "$avg_rpc"
        }
    },
    // 6. 按RPC降序排序
    {
        "$sort": {"rpc": -1}
    }
])

关键修改说明:

  • 第二次分组时,直接引用第一次分组输出的$_id.pid和$_id.keywordid(原代码错误使用了已不存在的$graphdata字段)
  • 删除多余的$push和$unwind操作,通过第二次分组直接聚合得到每个keywordid的唯一条目
  • 重命名中间计算字段(如hourly_clicks),避免与最终总点击量混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:56:09