这是我在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 ;我在第二级子项目中搜索。
答案 0 :(得分:2)
您应该更改数据库模型。使用map
代替list
:
569 : {
"distance" : 15 ,
"date" : 1594138245 ,
"runners" : {
"kjhkj435kkjhkjh" : true ,
"gkl5lj4325dsag7" : true ,
"6ffsdaadsgds6s5" : true
}
}
请检查 Best Practices: Arrays in Firebase
然后,您可以使用Query
和orderByChild
方法,如下所示:
Query query = FirebaseDatabase.getInstance().getReference("races")
.orderByChild("runners/" + userId).equalTo(true);
最后,您可以添加ValueEventListener
并获取您的比赛列表。