如何在Firebase中查看子项的子项?

时间:2016-12-05 23:26:38

标签: android firebase firebase-realtime-database

这是我在Stackoverflow发布的第一个问题,因为这是我第一次找不到解决问题的方法。

我有一个像这样的Firebase数据库结构:

{ "races" : {
    567 : {
        "distance" : 10 ,
        "date" : 1594124321 ,
        "runners" : {
            1 : "aaaaaaaaaaaaaaa" ,
            2 : "gf76dsgf45dsag7" ,
            3 : "6f4565dsa4fa6s5" ,
            4 : "lh43k2l3kj2l4kj" ,
            5 : "lklk3f4545s7c93"
        }

    },
    568 : {
        "distance" : 5 ,
        "date" : 1594135432 ,
        "runners" : {
            1 : "faskj432lk5465f" ,
            2 : "aaaaaaaaaaaaaaa" ,
            3 : "6f4565fdsgds6s5" ,
            4 : "lh43gfdsaj2l4kj"
        }

    },
    569 : {
        "distance" : 15 ,
        "date" : 1594138245 ,
        "runners" : {
            1 : "kjhkj435kkjhkjh" ,
            2 : "gkl5lj4325dsag7" ,
            3 : "6ffsdaadsgds6s5"
        }

    },
}

我需要的是进行查询,以获得某位选手参加的比赛的比赛ID。

示例:搜索跑步者" aaaaaaaaaaaaaaa"并在这种情况下获得比赛567和568.为此,orderByChild它没有被使用,因为我&#39 ;我在第二级子项目中搜索。

1 个答案:

答案 0 :(得分:2)

您应该更改数据库模型。使用map代替list

569 : {
    "distance" : 15 ,
    "date" : 1594138245 ,
    "runners" : {
        "kjhkj435kkjhkjh" : true ,
        "gkl5lj4325dsag7" : true ,
        "6ffsdaadsgds6s5" : true
    }

}

请检查 Best Practices: Arrays in Firebase

然后,您可以使用QueryorderByChild方法,如下所示:

Query query = FirebaseDatabase.getInstance().getReference("races")
                  .orderByChild("runners/" + userId).equalTo(true);

最后,您可以添加ValueEventListener并获取您的比赛列表。