用于Firebase的嵌套orderByChild

时间:2018-09-21 18:25:06

标签: javascript firebase firebase-realtime-database

我正在尝试在我拥有的Firebase数据库中获取女性比赛时间的列表。我的数据库结构可能不正确,但是我看不到为什么我的工作无法正常工作。

我正在尝试获取女性用户列表,然后检查与任何女性uid匹配的最快时间。但是我坚持参加桌子。

我的数据库和代码如下:

Database Example

var userref = rootref.child("Users");
var raceref = rootref.child('Races');
userref.orderByChild("Gender").equalTo('Female').on("child_added", function(snapshot) {
    console.log(snapshot.key);     
    raceref.orderByChild("uid").equalTo(snapshot.key).once("child_added", function(raceshot) {
        console.log(raceshot.key);
    });
});

然后,控制台仅显示snapshot.key,而不显示raceshot.key: -864646859 -305907999

如果我手动输入snapshot.key中的数字,那么raceshot.key确实会显示在控制台中。我没有收到任何错误,所以我对为什么不能对equalTo使用snapshot.key感到困惑。

1 个答案:

答案 0 :(得分:0)

快照的定义是一个字符串,因此/Users/$id中的$id值是字符串。但是,在/Races/$raceid/uid属性中,您将值存储为数字。

我的感觉是,该类型的比较失败。如果确实是这个原因,您应该可以通过将密钥转换为数字来解决它:

userref.orderByChild("Gender").equalTo('Female').on("child_added", function(snapshot) {
    console.log(snapshot.key);     
    raceref.orderByChild("uid").equalTo(parseInt(snapshot.key)).once("child_added", function(raceshot) {
        console.log(raceshot.key);
    });
});