我在stackoverflow上进行了大量搜索,并阅读了许多问题
我有3个indexOn解决了其中的2个问题,剩下1个问题
我正在对数据库进行排序,并且在成功运行的“收藏夹”和“诗人”上具有indexOn,但是我需要为心脏节点内的数字再设置一个indexOn。
查询运行成功,但是我在android studio中收到indexOn警告
我尝试在数据库规则中使用变量代替数字,但仍收到警告
使用未指定的索引。您的数据将在客户端上下载并过滤。考虑在gazal的安全性和Firebase数据库规则中添加'.indexOn':“ heart / + 91916 *******”'以提高性能
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
节点,然后根据需要逐一阅读这些诗歌。另请参阅:
Firebase query if child of child contains a value
Firebase Realtime Database - index on location containing uid