【发布时间】:2020-04-05 10:43:32
【问题描述】:
我的数据库结构中的用户具有用户创建帐户时创建的用户名。用户名位于元数据下方。我已经有 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')
【问题讨论】:
-
我很难解析你的问题。请记住,“这是最好的方法”很少是一个很好的问题,所以我建议针对“为什么我的代码执行 abc,而我希望它执行 xyz?”由于您没有共享代码,因此很难提供帮助。 “我希望能够搜索用户名”是什么阻止了你这样做?
-
@FrankvanPuffelen 我添加了一些示例代码,这是我知道如何下拉整个用户列表的唯一方法(然后我将使用 javascript 使用地图或过滤器函数)。这是超级低效的。有没有办法简单地通过用户下的 UID 获取用户,而不必拉下整个用户节点?
标签: javascript firebase firebase-realtime-database