我要存储记分牌以及以毫秒为单位的日期,并使用startAt
和endAt
方法查询日期。这给了我该日期范围内的所有用户,现在我想根据得分对用户进行排序,但我无法做到这一点。
答案 0 :(得分:0)
这是一个非常普遍的问题。由于您尚未附加数据库或代码,因此我无法为您提供执行此操作的正确代码,但是以基本的原则可以按分数相同的顺序检索用户的最佳方法
基本原理是,除了在用户对象中设置名称和分数外,还可以使用setWithPriority
为其设置优先级。
在这种情况下,优先级可以是用户的分数(如果是数字,它将自动为您排序)。然后,您可以使用.limit(10)
查询来获取前10位用户的列表。
您还必须实现child_added
,child_changed
和child_removed
事件,以处理新用户进入前10名,某人改变职位而某人离开前者的情况分别有10个列表。
您可以在这里阅读并了解更多信息:https://www.firebase.com/tutorial/#example/leaderboard
答案 1 :(得分:0)
不幸的是,如果不对数据库的结构进行一些更改,就无法使用Firebase实时数据库实现此目标。与Cloud Firestore不同的是,实时数据库不具有对多个属性执行过滤的功能(如SQL术语中所述,使用“多个WHERE子句”)。
如果要检查多个属性的匹配项,则必须创建一个复合属性,其中可以包含要查找的属性的组合。例如,您将需要一个包含score
和date
的字符串值,就像我在此 post 的答案中所解释的那样。