当电子邮件ID是Firebase中的密钥时,查询电子邮件ID的子项,以检查子项是否存在

时间:2017-09-05 02:52:01

标签: android firebase firebase-realtime-database

我在Android中有一个Firebase数据库,我有根“USERS”,并且有多个用户将密钥作为电子邮件ID。

因此,数据库的模式就是这样,数据库使用电子邮件ID作为每个用户的主键:

{
  "USERS":
    { "ABC@GMAIL,COM" : 
      { "USERNAME": "abc",
        "URL": "SOME_URL",...
      }
    }
    { "DEF@GMAIL,COM" :
      { "USERNAME": "dfe",
        "URL": "SOME_URL2",...
      }
    }
    .......
    .......
    .......
}

现在,电子邮件ID是每个用户的主键。在电子邮件ID内部是我想要的用户名密钥是进行查询。我想检查用户名是否存在? 所以通常的方法是使用数据库参考 - 像这样 -

DatabaseReference mDBRef = FirebaseDatabase.getInstance().getReference("/USERS/" +  ???? + "/USERNAME");

然后在数据库引用上添加值事件侦听器。在dataSnapshot中检查它是否存在 -

dataSnapshot.exists()

现在我不知道在“USERS”之后要追加什么。此外,我希望数据库查询搜索用户名尽可能高效。什么是迭代电子邮件ID并检查email-id的子键是否存在的可能方法?

1 个答案:

答案 0 :(得分:0)

您可以使用orderByChild()函数

过滤结果
databasereference.orderByChild("USERNAME").equal("whatever")

为了在firebase数据库规则中获得完整的性能添加.indexOn属性

rules{
    //other rules
    "USERS":{
        ".indexOn":["USERNAME"]
    }
}
相关问题