我在Firebase实时数据库中使用Unity创建了一个简单的排行榜:
键对应于用户名,值对应于用户分数。
我想
我通过以下查询检索到前100名的分数:
FirebaseDatabase.DefaultInstance.GetReference (LEADERBOARD_TABLE_CAPTION).Child (leaderboardName).OrderByValue ().LimitToLast (20)
我使用LimitToLast是因为排序是按升序进行的。
结果看起来像:
1.test31,987
2.test85,975
3.test67,943
4.test94,941
5.test95,940
6.test71,929
7.test16,917
8.test64,911
9.test100,906
10.test42,870
11.test54,863
12.test88,861
13.test5,859
14.test97,844
15.test46,836
16.test26,765
17.test52,764
18.test4,763
19.test70,756
20.test51,742
然后对于第二个任务,我想检索用户名周围的分数,比如“test100”。我想检索这样一个结果(注意test100不需要排在前20位):
7.test16,917
8.test64,911
9.test100,906
10.test42,870
11.test54,863
我想运行这样一个查询,从test100开始,限制为前3个,然后在test100结束,限制为最后3个,但以按值排序的方式。没有这样的功能(我无法设法找到)。StartAt和EndAt总是基于值,但是我不能基于分数906来居中我的查询(可能有很多用户都有分数906)。
即使只有一个906仍然我的解决方案不工作。当我居中并获得906左右的前2分和后2分时,我不知道居中值的排名,也无法显示当前用户的当前排名。最低效的解决方案是检索所有按值排序的分数并搜索当前用户,但当我有10,000条记录时,这不是一个解决方案。
我怎么能这么做?
顺致敬意,
费西斯
Firebase数据库查询可以检索从特定键/值开始的项或以特定键/值结束的项。要检索特定键之前的5项和特定键之后的5项,需要使用两个查询。
leaderboard = FirebaseDatabase.DefaultInstance.GetReference(LEADERBOARD_TABLE_CAPTION).Child(leaderboardName);
var anchorItemKey = "...";
Query itemsBefore = leaderboard.orderByKey().endAt(anchorItemKey).limitToLast(6);
Query itemsAfter = leaderboard.orderByKey().startAt(anchorItemKey).limitToFirst(6);
上面的每个查询将检索(最多)6个项目,这比您需要的多了一个。原因是查询还将检索锚定项本身。
更新:如果您想检索基于分数的项目,围绕一个特定的键,您可以使用带有两个参数的start At()
方法:
leaderboard = FirebaseDatabase.DefaultInstance.GetReference(LEADERBOARD_TABLE_CAPTION).Child(leaderboardName);
var anchorItemKey = "...";
var scoreOfAnchorItem = ...;
Query itemsBefore = leaderboard.orderByChild("score").endAt(scoreOfAnchorItem, anchorItemKey).limitToLast(6);
Query itemsAfter = leaderboard.orderByChild("score").startAt(scoreOfAnchorItem, anchorItemKey).limitToFirst(6);
使用此变体,Firebase将按分数订购物品,然后返回锚定物品钥匙周围的物品。
在身份验证成功时,我正在编写以下代码:
波乔即是。java表示排行榜中的一个条目。Position是排行榜中的位置,1是得分最高的用户 . 我不知道该用什么谓词来返回5个条目,包括正在搜索的条目。另一个方面是性能,因为排行榜可以有几十万个条目。 *********编辑-1*********** 使用parallelStream()会导致问题吗? 列表条目=LeaderBoardUserEntryMap.EntrySet().Parall
请帮助我想从Firebase实时数据库检索一个特定的数据,我有2个用户,教授和学生,我想使用该数据进行验证。 FireBase实时数据库 FireBase实时数据库
Position是排行榜中的位置,1是得分最高的用户 GameBoard类有两个方法: submitScore(String uid,int score)每个玩家调用这个方法将他的分数提交到游戏板上。每个玩家/用户只有一个条目,因此,如果玩家多次调用此方法,则存储其最新得分 GetLeaderBoard(字符串uid) 上述代码的问题: 何时(理想情况下,在submitScore()期间)以及如何
当我试图检索recycleview中保存的数据时,它们显示的是所有用户的数据,而不是登录的用户。有人能帮忙吗?
firebase数据库最近的更新似乎有一些变化。我的项目在firebase\u数据库:^7.0.0版本下运行良好,但在firebase数据库的更新版本中,我无法更新项目代码。 以下是v7的工作版本 firebase\u数据库^9.0.12上的同一代码出现错误。我收到的错误在`(DataSnapShot snap)async{…}上错误是 无法将参数类型“Future Function(DataSn