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

时间:2015-02-05 22:27:33

标签: javascript firebase

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

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

首先,我收集所有uid,然后使用快照创建一个孩子的路径,该路径的值决定用户是否参与游戏。一旦评估我想按点对列表进行排序,但我找不到一种方法来做到这一点。想到使用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>";                                
        }
    });     
})

1 个答案:

答案 0 :(得分:0)

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

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
        }
    }
}