我正在尝试创建一个应用程序,我可以在特定用户帐户中获取/设置数据,我受到了Firebase的诱惑 .
我遇到的问题是,当我的结构如下所示时,我不知道如何定位特定用户数据:
online-b-cards
- users
- InnROTBVv6FznK81k3m
- email: "hello@hello"
- main: "Hello world this is a text"
- name: "Alex"
- phone: 12912912
我环顾四周,当他们给出一些随机哈希作为他们的ID时,我真的找不到任何关于如何访问个人数据的信息 .
我如何根据他们的名字获取个人用户信息?如果有更好的方法,请告诉我!
8 回答
最简单的方法是停止使用
.push(){}
将生成该随机密钥的函数 . 但是使用
.update(){}
函数,您可以在其中指定子项的名称,而不是使用随机键 .我认为最好的方法是根据Firebase提供的auth对象定义用户的ID . 当我创建用户时,我会:
这个id来自:
Firebase身份验证服务将始终确保在uid中设置所有提供程序中的唯一ID . 通过这种方式,您将拥有auth.uid并可以轻松访问所需的用户进行更新,例如:
以前,Firebase要求您生成自己的索引或下载某个位置的所有数据,以查找和检索与某些子属性匹配的元素(例如,所有用户都使用
name === "Alex"
) .2014年10月,Firebase通过
orderByChild()
方法推出了新的查询功能,使您能够快速有效地执行此类查询 . 请参阅下面的更新答案 .将数据写入Firebase时,您可以使用一些不同的选项来反映不同的用例 . 在高层次上,Firebase是一个树状结构的NoSQL数据存储,并提供了一些简单的原语来管理数据列表:
通过添加
orderByChild()
,您不再需要为子属性的查询创建自己的索引!例如,要检索名为"Alex"的所有用户:这里是Firebase的工程师 . 将数据写入Firebase时,您可以使用一些不同的选项来反映不同的应用程序用例 . 由于Firebase是NoSQL数据存储,因此您需要使用唯一键存储数据对象,以便可以直接访问该项,或者在特定位置加载所有数据并遍历每个项以查找您正在查找的节点对于 . 有关详细信息,请参阅Writing Data和Managing Lists .
当您在Firebase中写入数据时,您可以使用唯一的,定义的路径(即
a/b/c
)或push
数据将数据放入列表中,这将生成唯一ID(即a/b/<unique-id>
)并允许您对项目进行排序和查询按时间列出 . 您在上面看到的唯一ID是通过调用push
将项目附加到online-b-cards/users
列表中生成的 .不是在这里使用
push
,我建议使用set
,并使用唯一键存储每个用户的数据,例如通过Firebase JS SDK导航到online-b-cards/users/<email>
的用户's email address. Then you can access the user'数据 . 例如:请注意,由于Firebase不允许引用中的某些字符(请参阅Creating References),因此我们删除
.
并将其替换为上面代码中的,
.检索数据:
在您的数据库中,您使用的是使用
push()
生成的随机ID,因此,如果要检索数据,请执行以下操作:Using Firebase in Android App:
Using Firebase in Javascript:
在这里你有
users
的快照(数据的位置)然后你循环所有的随机id并检索名称 .检索特定用户的数据:
现在,如果您只想检索特定用户的信息,则需要添加查询:
Using Firebase in Android App:
Using Firebase with Javascript
使用
orderByChild("name").equalTo("Alex")
就像说where name="Alex"
所以它将检索与Alex相关的数据 .最佳方式:
最好的方法是使用Firebase身份验证,从而为每个用户生成一个唯一的ID并使用它而不是随机ID
push()
,这样您就不必遍历所有用户,因为您拥有该ID并且可以轻松访问它 .首先,用户需要登录,然后您可以检索唯一ID并附加侦听器以检索该用户的其他数据:
Using Firebase with Android:
Using Firebase with Javascript:
这是在Firebase中访问自动生成的唯一键的方法: data structure : - OnlineBcards - UniqueKey
这是一个帖子的解释,它帮助我尝试访问自动生成的唯一ID . Access Firebase unique ids within ng-repeat using angularFire implicit sync
谢谢,bennlich(来源):
火力地堡表现得像一个普通的javascript对象 . 也许以下示例可以让您走上正轨 .
编辑:不是100%肯定你想要的结果,但这里可能会引发'aha'时刻 . 在Firebase信息中心中单击您尝试访问的密钥 . 从那里你可以使用类似的东西:
根据经过身份验证的用户向您的数据库添加唯一ID的最简单和更好的方法是:
UId将是特定经过身份验证的电子邮件/用户的唯一ID
您可以通过以下代码获取详细信息 .