mongodb - MongoDB .- 为数组的每个元素创建一个字段
问题描述
我收藏了一些英超联赛的这类比赛:
{"HomeTeam": "Chelsea", "HTScore": 2, "FTR": 'D', "AwayTeam": "Everton", "ATScore":2},
{"HomeTeam": "Chelsea", "HTScore": 3, "FTR": 'H', "AwayTeam": "Wolves", "ATScore":1},
{"HomeTeam": "Chelsea", "HTScore": 2, "FTR": 'D', "AwayTeam": "Everton", "ATScore":2},
.....
{"HomeTeam": "Liverpool", "HTScore": 1, "FTR": 'A', "AwayTeam": "Aston Villa", "ATScore":3}
{"HomeTeam": "Liverpool", "HTScore": 6, "FTR": 'H', "AwayTeam": "Chelsea", "ATScore":3}
etc.
其中HomeTeam
和AwayTeam
代表比赛的两支球队,HTScore
代表主队得分,ATScore
代表客队得分并FTR
代表全场结果('A':客队获胜,'D':平局,'H':主队获胜)
我想创建一个这种类型的表,在上面的示例中是这样的
HomeTeam | Number of Victories | Number of Draws | Number of Defeats | Max Goals scored in a Match
---------------------------------------------------------------------------------------
Chelsea | 1 | 2 | 0 | 3
---------------------------------------------------------------------------------------
Liverpool | 1 | 0 | 1 | 6
有没有办法通过迭代 FTR 的值来自动创建这些字段?非常感谢您提前
解决方案
您可以使用聚合管道,并$group
以这种方式:
$group
获取主队的数据。在这里,为每个字段添加一个新字段,称为result
存储最终结果的位置,另一个称为goals
进球数。- 然后使用 设置结果中有多少“D”、“H”或“A”,即有多少胜、负或平
$filter
。 - 并且至少用于
$project
获取您想要的值。在这种情况下size
,数组的和max
得分的值。
db.collection.aggregate([
{
"$group": {
"_id": "$HomeTeam",
"result": {
"$push": "$FTR"
},
"goals": {
"$push": "$HTScore"
}
}
},
{
"$set": {
"draws": {
"$filter": {
"input": "$result",
"as": "d",
"cond": {"$eq": ["$$d","D"]}
}
},
"wins": {
"$filter": {
"input": "$result",
"as": "w",
"cond": {"$eq": ["$$w","H"]}
}
},
"defeat": {
"$filter": {
"input": "$result",
"as": "a",
"cond": {"$eq": ["$$a","A"]}
}
}
}
},
{
"$project": {
"HomeTeam": "$_id",
"Number_of_victories": {"$size": "$wins"},
"Number_of_draws": {"$size": "$draws"},
"Number_of_defeats": {"$size": "$defeat"},
"Max_goals": {"$max": "$goals"}
}
}
])
这里的例子
推荐阅读
- hyperledger-fabric - docker-compose 中的 Hyperledger explorer 无法与 Hyperledger 区块链一起使用
- reactjs - “对象作为 React 子项无效(找到:带有键 {} 的对象)。”
- vue.js - Laravel 5.6 + vue.js 应用路由器 + laravel 护照
- javascript - Google Autosuggest 地址从 Javascript 更改为 Jquery
- java - JAVA_HOME环境变量定义不正确,但是定义正确!Ubuntu 18.04.01
- node.js - dynamodb 通过 id 数组获取所有项目
- html - AMP轮播方向改变
- android - ExpandableListAdapter 删除组问题
- angular - 如何使用Angular 5中的按键事件定义输入文本的指令?
- javascript - 如何使用 nodejs 创建小部件 - 将脚本添加到网页