我数据库的结构中包含具有用户名的用户,该用户名是在用户创建帐户时创建的。用户名位于元数据下。我已经有2000多个用户,从没想过要限制用户名/确保人们在使用Facebook或google登录时不要重复或附加数字(在这些情况下,我目前只是使用他们的名字)。我希望能够搜索用户名:
"Users" : {
"eOhY4Wp6QNUtEjVTdmBff8UDY5p2" : {
"meta" : {
"username" : "testName"
}
}
}
我认为唯一的方法是创建另一个列出反向用户名的部分:
"UserList" : {
"testName" : "eOhY4Wp6QNUtEjVTdmBff8UDY5p2",
}
但是问题是我不能有多个具有相同用户名的用户/我认为不可能有多个具有相同密钥的节点。
这是解决这种情况的最佳方法吗?还是有一个具有相同用户名的替代方法(我不想使用快照来拉扯整个用户,因为这会占用大量的数据)。如果这是我确定的最好方法,那么我将手动更改数据库中已有的重复项。
编辑的其他内容:
这是我所知道的唯一从第一个结构中获取用户名的方法是获取整个快照,然后使用该用户名过滤用户-这将下载整个快照,这是超级数据密集型的,因为我只需要用户具有我要搜索的用户名的
const snapshot = await firebase.child("Users").on("value")
我知道有OrderBy方法,但不是顶层方法/我不需要直接在用户下方而不是更深2层的“ testName”。
const snapshot = await firebase.child("Users").orderByChild("username")
.equalTo('testName')
答案 0 :(得分:1)
由于您的用户名位于嵌套在已知路径下的属性中,因此您可以像这样查询它:
firebase.child("Users")
.orderByChild("meta/username")
.equalTo('testName')