java - 在更深层的嵌套项目上使用indexOn的问题-LMLPHP我在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

10-07 22:29