Java 如何实时过滤具有复杂节点的Firebase数据库中的数据

Java 如何实时过滤具有复杂节点的Firebase数据库中的数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,现在,我试图通过“phoneNumber”搜索来查找特定的用户id,但他的phoneNumber位于特定节点,因此很难找到,或者我不知道如何找到它。我想获取此信息节点的快照 数据库结构 我试图通过如下查询进行搜索: Query q=FirebaseDatabase.getInstance().getReference("Users") .orderByChild("phoneNumber").equalTo("8@gmail.com");

现在,我试图通过“phoneNumber”搜索来查找特定的用户id,但他的
phoneNumber
位于特定节点,因此很难找到,或者我不知道如何找到它。我想获取此信息节点的快照

数据库结构

我试图通过如下查询进行搜索:

     Query q=FirebaseDatabase.getInstance().getReference("Users")
                    .orderByChild("phoneNumber").equalTo("8@gmail.com");
    ```
    and also tried this one 

    ``` 
    Query q=FirebaseDatabase.getInstance().getReference("Info")
                    .orderByChild("phoneNumber").equalTo("8@gmail.com");


但也不起作用:(

这些查询都不起作用,因为在第一次查询中,您缺少
信息
子项,而在第二次查询中,您缺少
用户
子项。要解决此问题,请使用以下查询:

Query q = FirebaseDatabase.getInstance().getReference()
    .child("Users")
    .orderByChild("Info/phoneNumber")
    .equalTo("8@gmail.com");

您需要做的第一件事是在您的firbase控制台规则中创建索引 像这样

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {
     ".read" : true,
    ".write" : false,
    "admin": {
        ".indexOn": "phone"
    }
  }

}
然后在文件中写下您试图通过电话号码获取数据的位置

Query q=FirebaseDatabase.getInstance().getReference("Users")
                    .orderByChild("phoneNumber").equalTo("phoneValue")->getValue();

请添加您的数据库结构。对不起,我忘了上传,谢谢@AlexMamo