首页 文章

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

提问于
浏览
0

我在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

    您可以使用orderByChild()函数过滤结果

    databasereference.orderByChild("USERNAME").equal("whatever")
    

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

    rules{
        //other rules
        "USERS":{
            ".indexOn":["USERNAME"]
        }
    }
    

相关问题