如何根据属性值firebase获取节点的记录?

时间:2019-01-23 21:43:32

标签: javascript firebase firebase-realtime-database

我目前有以下节点:

enter image description here

基本上我想要的是通过uid参数搜索注册表。我不明白的是,他们告诉我我不应该通过查询来做到这一点,那又是什么呢?我尝试了以下方法:

 firebase
              .database()
              .ref('nuevosUsuario')
              .child(user.uid)
              .once('value')
              .then(snapshot => 
                console.log(snapshot.val())
              );

pero me imprime en consola null 预先谢谢您,我是Firebase的新手。

1 个答案:

答案 0 :(得分:0)

您的JSON结构存储用户信息,它在所谓的推入ID(通过调用push()childByAutoId()生成的键)下存储每个用户的信息。您正在尝试查询此结构以根据用户的UID查找用户,该用户ID存储在每个用户的属性中。唯一的方法是使用数据库查询,例如:

firebase.database()
      .ref('nuevosUsuario')
      .orderByChild("uid")
      .child(user.uid)
      .once('value')
      .then(snapshot => {
        snapshot.forEach(userSnapshot => { 
          console.log(snapshot.val())
        });
      });

您需要在此处执行循环,因为可能有多个节点为其UID属性具有正确的值。


如果在nuevosUsuario下每个用户在逻辑上只能有一个节点,则最好将用户信息存储在用户的UID下作为键,而不是使用推送ID。

所以您将得到一个类似的结构:

"nuevosUsuario": {
  "SYFW1u808weaGEf3fW...": {
    "appellido": "PRUEBA",
    "correo": "..."
    ...
  }
}

这有一些优点:

  • 每个用户只能有一个子节点,因为键在定义中在集合中是唯一的。
  • 您现在可以在不进行查询的情况下为用户提供其UID,这在代码中既快捷又简单。如下所示:您问题中的代码适用于此结构。