我试图访问一个对象到另一个对象在我的firebase数据库中,我有一个这样的结构:
的数据
我想得到所有的对象,有我通过参数发送的电子邮件,我使用.child访问到我的对象的查尔兹,但我没有成功的查询,这是我的代码
$ ref_db.child("/groups").child("members").orderByChild("email").equalTo(email).once("value", (snapshot)=>{
console.log(snapshot.val());
});
字符串
snapshot.瓦尔()始终未定义。
能帮我查询一下吗?
2条答案
按热度按时间6g8kf2rb1#
一个有效的方法来获得“所有的组,有该电子邮件内的成员对象”将是反规范化你的数据,并有另一个“主节点”在您的数据库中,您存储所有的“成员”(即他们的电子邮件)和“组”,他们属于。
这意味着,每次在“组”(包括其电子邮件)下添加“成员”节点时,您也会将该组作为成员电子邮件的子节点添加到另一个“主节点”中。
更具体地说,数据库结构是这样的:
您目前的结构:
字符串
额外的结构:
型
通过这种方式,您可以轻松地查询成员所属的组列表,如下所示。无需在多个项目上循环多次。这种dernomalization技术在NoSQL数据库中非常经典。
型
为了同时写入两个数据库节点,请使用
update
方法,如此处所述https://firebase.google.com/docs/database/web/read-and-write#update_specific_fieldsc90pui9n2#
这是因为你在
members
之前有一个随机键,你需要遍历路径而不是跳过一个节点,才能访问值:字符串