我正在尝试使用AngularFire和Firebase对排名进行排名。
在Firebase中我有4个团队,我只存储名称。 我还存储了比赛,这些比赛可以参考争议比赛的球队和每个比赛的得分。
匹配节点如下所示:
matches
-KQgphN_5692GySN0Oxz
home_team: teamA
away_team: teamB
score
home: 1
away: 2
-KQlu6XLak6LgAr9cTty
home_team: teamC
away_team: teamD
score
home: 2
away: 2
团队节点:
teams
teamA
name: "Team A"
teamB
name: "Team B"
teamC
name: "Team C"
teamD
name: "Team D"
所以,我需要通过实时观察结果,通过vitories,draw和loss来订购这些团队。
我有一个ng-repeat,列出了这样的团队:
<li ng-repeat="team in teams">{{team.name}}</li>
那么,我如何通过胜利来命令这些球队,考虑到胜利相当于3分,平局是1分而损失是0分?
使用上述匹配示例,排名应为:
1 - B队
2 - C队
3 - D队
4 - A队
答案 0 :(得分:0)
您可以按嵌套值订购Firebase数据库查询,只要该嵌套值位于固定路径即可。这意味着您需要存储每个团队的分数,例如
teams
teamA
name: "Team A"
score: 20
teamB
name: "Team B"
score: 12
teamC
name: "Team C"
score: 42
teamD
name: "Team D"
score: 31
使用此结构,您可以按顺序加载顶级团队:
var leaders = ref.child('teams').orderByChild('score').limitToLast(3);
leaders.on('value', function(snapshot) {
leaders.forEach(function(leaderSnapshot) {
console.log(leaderSnapshot.child('name').val());
});
});
这将打印:
A队
D队
C队
所以要获得排行榜,你需要反转它们。