无法通过timeStamp对Firebase实时数据库中的数据进行排序

时间:2018-12-02 22:16:08

标签: android firebase firebase-realtime-database firebase-security-rules

我正在我的应用程序中的用户之间挑战。我试图让最后15位参与挑战的用户。每当用户输入新挑战时,我都会存储时间。该查询在乞求中运行良好,但是此后它停止显示新用户,并且只显示旧用户。

这是查询代码:

 usersReference.orderByChild("lastChallengeDate")
            .limitToLast(15)
            .addListenerForSingleValueEvent(new ValueEventListener() 

这是用户子级的数据库结构:

当我打开日志时,尽管我在规则中使用了索引开,但我发现此警告

  

W / PersistentConnection:pc_0-使用未指定的索引。考虑在用户的安全性和Firebase数据库规则中添加'.indexOn':“ lastChallengeDate”'以获得更好的性能

1 个答案:

答案 0 :(得分:1)

如果您对某个位置执行查询,则Firebase会在您指定的属性上对该位置下的子项进行排序。 lastChallengeDate的每个子项正下方的users中没有任何值。相反,该属性位于lastChallengeDate/time下,因此您应该在该订单上订购

usersReference.orderByChild("lastChallengeDate/time")
        .limitToLast(15)
        .addListenerForSingleValueEvent(new ValueEventListener() 

您还需要在users(或您查询的节点的名称)上定义索引:

{
  "rules": {
    "users": {
      ".indexOn": "lastChallengeDate/time"
    }
  }
}

请务必同时学习: