java - 在更深的嵌套项目上使用 indexOn 的问题

标签 java android firebase-realtime-database

enter image description here我在 stackoverflow 上搜索了很多并阅读了很多问题 我有 3 个 indexOn 问题,其中 2 个已解决,1 个仍然存在 我正在对数据库进行排序,并在成功运行的“Collection 夹”和“诗人”上设置了 indexOn,但我还需要一个用于心脏节点内数字的 indexOn。 查询运行成功,但我在 android studio 中收到 indexOn 警告

我尝试在数据库规则中使用变量代替数字,但仍然收到警告

Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding '".indexOn": "heart/+91916*******"' at gazal to your security and Firebase Database rules for better performance

queryFav = FirebaseDatabase.getInstance()
             .getReference(reference).orderByChild(child).equalTo("heart");

上面的查询运行成功但是indexOn规则应该是什么

最佳答案

您收到的消息意味着您正在运行一个查询,该查询在名为 gazal 的节点上具有 orderBy("heart/+91916*******") .要高效地运行该查询,您需要在 heart/+91916******* 上为您的安全规则中的该节点创建一个索引。但是由于该索引的 +91916***** 部分可能是动态的(即您将有不同的值 +91916******* 应用程序的每个用户),您必须为每个用户添加一个索引。那是不可行的。

换句话说:您当前的数据结构使阅读喜欢特定诗歌的用户变得容易。然而,确定特定用户喜欢的诗歌并不容易。为了使这同样容易,您需要添加一个额外的数据结构”

"user_hearts": {
  "+91916*******": {
    "-KjYiXzl1ancR8Pi3MfQ": true
  }
}

通过上述结构,您可以轻松地为您感兴趣的用户读取user_hearts节点,然后在需要时一首一首地读取诗歌。

另见:

关于java - 在更深的嵌套项目上使用 indexOn 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757754/

相关文章:

Android installLocation 和 BOOT_COMPLETED

swift - 抓取保存在 Firebase 中的数据并将其呈现在 View Controller 上

Swift - 从 Firebase 检索自动分配的 ID

android - 如何将按钮的背景设置回 default_holo_dark

android - 简单的 Android 广播不显示 toast

javascript - 迭代 firebase 数据库中的子值

java - Android 测试项目 JUnit 失败跟踪未显示预期 + 实际

java - 以编程方式在android中动态创建 View 对象

Java代理连接到postgres

java - 动态调整窗口大小 swt java