java - 在更深的嵌套项上使用 indexOn 的问题
问题描述
我在 stackoverflow 上进行了很多搜索并阅读了很多问题 我有 3 个 indexOn 问题其中 2 个已解决,剩下 1 个我正在对数据库进行排序,并且在“favorite”和“poet”上有 indexOn,它们运行成功,但我需要一个 indexOn心脏节点内的数字。查询运行成功,但我在 android studio 中收到 indexOn 警告
我尝试在数据库规则中使用变量代替数字,但仍然收到警告
使用未指定的索引。您的数据将在客户端下载和过滤。考虑将 '".indexOn": "heart/+91916*******"' at gazal 添加到您的安全和 Firebase 数据库规则中以获得更好的性能
queryFav = FirebaseDatabase.getInstance()
.getReference(reference).orderByChild(child).equalTo("heart");
上面的查询运行成功,但 indexOn 规则应该是什么
解决方案
您收到的消息意味着您正在运行一个orderBy("heart/+91916*******")
在名为 的节点上的查询gazal
。为了有效地运行该查询,您需要heart/+91916*******
在安全规则中对该节点建立索引。但是由于该+91916*******
索引的一部分可能是动态的(即,+91916*******
对于应用程序的每个用户,您将拥有不同的值),因此您必须为每个用户添加一个索引。这是不可行的。
换句话说:您当前的数据结构可以轻松阅读对特定诗歌感兴趣的用户。然而,确定特定用户所喜爱的诗歌并不容易。为了同样简单,您需要添加一个额外的数据结构”
"user_hearts": {
"+91916*******": {
"-KjYiXzl1ancR8Pi3MfQ": true
}
}
通过上述结构,您可以轻松地user_hearts
为您感兴趣的用户读取节点,然后在需要时一一阅读诗歌。
另见:
推荐阅读
- shell - 使用 `multios` 的 zsh 重定向不会多次重定向标准输出
- tortoisesvn - 在 TortoiseSVN 中,解决更新冲突后是否也会发生合并冲突?
- kotlin - 为什么 kotlin multiplatform 不执行和导出 iOS 框架?
- html - Bootstrap 4 设置高度:100%;到具有 flex-grow:1 的 flex 项的子项
- c# - 如何从另一个泛型方法调用泛型属性
- go - 如何解决“请求的资源上不存在‘Access-Control-Allow-Origin’标头”
- python - 如何使用嵌套的 for 循环来查找线性方程的 x 和 y
- wordpress - 仅使用 wordpress 通过电子邮件自动登录用户
- javascript - 状态更改时自动响应本机打开模式
- scala - 如何从逗号分隔的字符串构建地图行?