我是MongoDB的新手。但是,我对一些聚合函数/运算符有所了解。
首先,请看一下数据(它包含板球比赛信息(:
一个文档(行(如下所示:
{
"ID": 577,
"Inning": 1,
"BattingTeam": "Sunrisers Hyderabad",
"BowlingTeam": "Royal Challengers Bangalore",
"Over": 1,
"Bowler": "S Aravind",
"Ball": 1,
"Batsman": "DA Warner",
"NonStriker": "S Dhawan",
"TotalRuns": 1
}
...
...
这是整个数据文件:http://raw.sam016.com/shared/match_data.json
那些不了解板球的人(像我一样(,这里有一些信息:
- 一场比赛包含 2 局 [1, 2]
- 每局包含一些翻盘 [20, 60]
- 每个最多包含 6 个球
我想以这样一种方式聚合/分组这些数据,以获得以下类型的分层结果:
[{
"ID": 577,
"Innings": [{
"Inning": 1,
"BattingTeam": "Sunrisers Hyderabad",
"BowlingTeam": "Royal Challengers Bangalore",
"Overs": [
{
"Over": 1,
"Bowler": "S Aravind",
"Balls": [
{
"Ball": 1,
"Batsman": "DA Warner",
"NonStriker": "S Dhawan",
"TotalRuns": 1
},
{...},
{...}
]
},
{...},
{...}
]
},
{
"Inning": 2,
"BattingTeam": "Royal Challengers Bangalore",
"BowlingTeam": "Sunrisers Hyderabad",
"Overs": [
{
"Over": 1,
"Bowler": "B Kumar",
"Balls": [
{
"Ball": 1,
"Batsman": "CH Gayle",
"NonStriker": "V Kohli",
"TotalRuns": 0
},
{...},
{...}
]
},
{...},
{...}
]
}
]
}]
任何帮助都将不胜感激。
您可以在下面的聚合管道下尝试。
您只需$group
键并$push
数据即可创建每个级别。
从最里面的Balls
级开始,一直到Innings
。
db.cricket.aggregate({
$group: {
"_id": {
"ID": "$ID",
"Inning": "$Inning",
"BattingTeam": "$BattingTeam",
"BowlingTeam": "$BowlingTeam",
"Over": "$Over",
"Bowler": "$Bowler"
},
"Balls": {
$push: {
"Ball": "$Ball",
"Batsman": "DA Warner",
"NonStriker": "S Dhawan",
"TotalRuns": "$TotalRuns"
}
}
}
},
{
$group: {
_id: {
"ID": "$_id.ID",
"Inning": "$_id.Inning",
"BattingTeam": "$_id.BattingTeam",
"BowlingTeam": "$_id.BowlingTeam"
},
"Overs": {
$push: {
"Over": "$_id.Over",
"Bowler": "$_id.Bowler",
"Balls":"$Balls"
}
}
}
},
{
$group: {
"_id": "$_id.ID",
"Innings": {
$push: {
"Inning": "$_id.Inning",
"BattingTeam": "$_id.BattingTeam",
"BowlingTeam": "$_id.BowlingTeam",
"Overs":"$Overs"
}
}
}
})