Php 在Firebase中使用带嵌套键的.indexOn

Php 在Firebase中使用带嵌套键的.indexOn,php,firebase-realtime-database,firebase-security,Php,Firebase Realtime Database,Firebase Security,我正在使用Firebase PHP SDK,并试图找到一种在嵌套键userId上使用.indexOn Firebase规则的方法,我想知道为什么我还没有正确使用它。提前谢谢 我有一个名为“conversations”的表,第一级嵌套是用户id,第二级嵌套是键 conversations -->user1 -->key1 -->userId -->key2 -->userId -->user2 -->key1

我正在使用Firebase PHP SDK,并试图找到一种在嵌套键userId上使用.indexOn Firebase规则的方法,我想知道为什么我还没有正确使用它。提前谢谢

我有一个名为“conversations”的表,第一级嵌套是用户id,第二级嵌套是键

conversations
-->user1
   -->key1
      -->userId
   -->key2
      -->userId
-->user2
   -->key1
      -->userId
   -->key2
      -->userId
以下是添加的Firebase规则

{
“规则”:{
“.read”:“auth!=null”,
“.write”:“auth!=null”,
“对话”:{
“.indexOn”:[“用户/密钥/用户ID”]
}   
}
}
在PHP级别,我尝试检索数据,但失败了

$reference = $database->getReference('conversations/'.$request['userId'].'/')
                          ->orderByChild('userId')
                          ->equalTo('ABCD')
                          ->getValue();

索引需要在运行查询的JSON级别上定义。由于您在
/conversations/$uid
上运行查询,因此也需要在这里定义索引

因此:

注意,我还更新了索引内容,以与传递到
orderByChild
中的值相匹配

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "conversations": {
      "$uid": {
        ".indexOn": ["userId"]
      }   
    }   
  }
}