如何使用 firebase 按用户子目录中的数据排序列表

How do I order list by data from user's sub directory using firebase

我想根据用户在自己的子目录中的点数来显示列表中的用户。在我的应用程序中,我根据其自定义 uid 在数据库中创建一个用户,并创建一个目录,其中包含我要根据其对列表进行排序的点。它看起来是这样的:

users: {
    uid1: {
        name: something,
        game: {
            points: 10
        }
    },
    uid2: {
        name: something2,
        game: {
            points: 10
        }
    }
}

所以我首先收集所有 uid,然后使用快照创建 child 的路径,该路径具有决定用户是否参与游戏的值。评估后,我想按点对列表进行排序,但我找不到办法。想过使用 FirebaseUsers.orderByChild('game/points') 但它不是一个有效的参数。

FirebaseUsers.on('value', function(snapshot) {      
    snapshot.forEach(function(childSnapshot) {
        var playerStatus = childSnapshot.child("game/player"),
            playerPoints = childSnapshot.child("game");         
        if(playerStatus.val() == true) {                
            allFirstNames += "<p>" + childSnapshot.val().firstname + "</p>";
            allLastNames += "<p>" + childSnapshot.val().lastname + "</p>";
            allPoints += "<p>" + playerPoints.val().points + "</p>";                                
        }
    });     
})

您只能通过直系子代 属性 订购商品,而不能通过较低级别的后代订购。因此,您必须确保您要订购的价值在用户级别可用:

users: {
    uid1: {
        name: something,
        points: 10,
        game: {
        }
    },
    uid2: {
        name: something2,
        points: 10,
        game: {
        }
    }
}

如果您碰巧在下面有多个游戏,您很可能希望根据玩家拥有的最高分数进行排序。在这种情况下,将玩家的最高分提升到用户级别:

users: {
    uid1: {
        name: something,
        max_points: 10,
        game: {
            points: 10
        }
    },
    uid2: {
        name: something2,
        max_points: 10,
        game: {
            points: 10
        }
    }
}