2

我在我的应用程序中的用户之间进行挑战。我试图让最后 15 名用户进入挑战。每次用户进入新挑战时,我都会存储时间。该查询在乞讨中运行良好,但之后它停止显示新用户并且只显示旧用户。

这是查询代码:

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

这是用户 child 的数据库结构:

当我打开日志时,我发现了这个警告,尽管我在我的规则中使用了 index on

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

4

1 回答 1

1

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

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

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

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

一定要学习:

于 2018-12-02T22:46:07.257 回答