如何使用复杂节点实时从Firebase数据库过滤数据

时间:2019-06-04 10:16:48

标签: java android firebase firebase-realtime-database

现在,我正在尝试通过“ phoneNumber”进行搜索来找到特定的用户ID,但他的phoneNumber在特定节点中,因此很难到达或不知道如何找到它。我想获取此Info节点的快照。

数据库结构

enter image description here

我试图通过这样的查询进行搜索:

     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");

但也没有用:(

2 个答案:

答案 0 :(得分:0)

这些查询都不起作用,因为在您的第一个查询中,您缺少Info子级,在第二个查询中,您缺少了Users子级。要解决此问题,请使用以下查询:

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

答案 1 :(得分:0)

您需要做的第一件事是必须在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();