mongodb 聚合帮助。按字段删除组

问题描述 投票:0回答:1

我需要按 $hour 字段进行分组,以便我可以匹配查询中的特定时间,但最终结果我不希望输出中包含 _id.hour 。我尝试添加第二个分组依据,但结果仍然显示同一关键字 ID 的多个记录,因为它返回基于第一个分组依据的结果,该结果在结果中包含多个小时。

db.getCollection("yahoohourlyquick").aggregate([{
"$match": {
     "pid" : {"$in" : [759]},
        "date":      {"$gte": new ISODate('2024-03-29')},
        "clicks":    {"$gt": 0},
        "graphdata": {"$regex": "^rs-"},
    },
},
{
    "$group": {
        "_id": {
            "date":   {"$hour" : "$date"},
            "pid":       "$pid",
            "keywordid": "$graphdata",
        },
        "rpc": {"$avg": "$cpc"},
        "clicks" : {"$sum" : "$clicks"},
    },
},
{
    "$match" : {
      "_id.date" : {$in:[1,2,3]}, 
      "clicks" : {"$gte" : 10}
    }
},
{
    "$group": {
        "_id": {
            "pid":       "$pid",
            "keywordid": "$graphdata",
        },
        "data" : {$push: {
            "clicks" : "$clicks",
            "rpc" : "$rpc",
            "keywordid" : "$_id.keywordid",
            "pid" : "$_id.pid"
        }}
    },
},
{$unwind : "$data"},
{
    "$project": {
          _id : 0,
          "pid" : "$data.pid",
          "keywordid" : "$data.keywordid",
          "clicks" : "$data.clicks",
          "rpc" : "$data.rpc"
     },
},
{
   "$sort" : {"rpc":-1}
   }
])  

我的目标是让输出包含 PID、关键字 ID、点击次数总和、平均 RPCS。不应该有具有相同keywordid的行,但我似乎无法解决这个问题。

运行此命令时的示例结果:

您可以看到关键字“rs-2391021771”在那里出现两次,因为它有多个小时的数据。我不想在结果中细分每个小时。

mongodb aggregation-framework
1个回答
0
投票

我终于成功了。

db.getCollection("yahoohourlyquick").aggregate([{
"$match": {
     "pid" : {"$in" : [759]},
        "date":      {"$gte": new ISODate('2024-03-29')},
        "clicks":    {"$gt": 0},
        "graphdata": {"$regex": "^rs-"},
    },
},
{
    "$project": {
          "hour":   {"$hour" : "$date"},
          "pid" : "$pid",
          "keywordid" : "$graphdata",
          "rpc" : "$cpc",
          "clicks" : "$clicks"
     },
},
{
    "$match" : {
      "hour" : {$in:[23,0,1]}, 
    }
},
{
    "$group": {
        "_id": {
            "pid":       "$pid",
            "keywordid": "$keywordid",
        },
        "rpc": {"$avg": "$rpc"},
        "clicks" : {"$sum" : "$clicks"},
    },
},
{
    "$match" : {
      "clicks" : {"$gte" : 10}
    }
},
{
    "$project": {
          "pid" : "$_id.pid",
          "keywordid" : "$_id.keywordid",
          "rpc" : "$rpc",
          "clicks" : "$clicks"
     },
},
{
   "$sort" : {"rpc":-1}
   } 
])
© www.soinside.com 2019 - 2024. All rights reserved.