簡體   English   中英

MongoDB雙$ group聚合

[英]MongoDB double $group aggregation

我有幾個文檔看起來像這樣:

{
        "_id" : ObjectId("50b59cd75bed76f46522c34e"),
        "player_id" : 0,
        "league_id" : 2,
        "results" : [
                {   "discipline" : "football",
                    "score" : 25.15
                },
                {
                        "discipline" : "basketball",
                        "score" : 21.24
                },
                {
                        "discipline" : "cycling",
                        "score" : 68.19
                },]
}

我嘗試聚合這些數據。 首先展開結果數組,然后只留下“ 足球 ”和“ 騎自行車 ”,接下來計算平均結果。 這部分我做了,它正在發揮作用。 我的代碼:

db.grades.aggregate(
    {$unwind:"$results"},
    {$match: {$or: [{"results.discipline":"football"},{"results.discipline":"cycling"} ]}},
    {$group:{_id:{player_id:"$player_id",league_id:"$league_id"}, 'average':{$avg:"$results.score"}}},
    )

然后我嘗試通過league_id進行聚合,這意味着,普通玩家會在特定聯盟中產生結果,添加到上面的代碼: {$group:{_id:"$_id.league_id",aver_league:{$avg:$average}}}

現在代碼看起來像:

db.grades.aggregate(
        {$unwind:"$results"},
        {$match: {$or: [{"results.discipline":"football"},{"results.discipline":"cycling"} ]}},
        {$group:{_id:{player_id:"$player_id",league_id:"$league_id"}, 'average':{$avg:"$results.score"}}},
{$group:{_id:"$_id.league_id",aver_league:{$avg:$average}}}
        )

控制台顯示: JavaScript execution failed: ReferenceError: $average is not defined. 怎么了? 我在哪里弄錯了? 可以通過_id.league_id嗎?

試試這個管道:

[
 {$unwind:"$results"}, 
 {$match: {"results.discipline":{$in:["football", "basketball"]}}}, 
 {$group{_id:{player_id:"$player_id",league_id:"$league_id"}, 'average':{$avg:"$results.score"}}} 
]

它適合我的文檔:

{
"result" : [
    {
        "_id" : {
            "player_id" : 0,
            "league_id" : 2
        },
        "average" : 23.195
    }
],
"ok" : 1
}

UPD。 如果你想再次分組,請通過league_id

[{$unwind:"$results"}, 
{$match: {"results.discipline":{$in:["football", "basketball"]}}}, 
{$group:{_id:{player_id:"$player_id",league_id:"$league_id"}, 'average':{$avg:"$results.score"}  }}, 
{$group:{_id:"$_id.league_id", 'average':{$avg:"$average"}  }} ]

{ "result" : [ { "_id" : 2, "average" : 23.195 } ], "ok" : 1 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM