当前位置: 首页 > 知识库问答 >
问题:

使用Firebase按名称获取用户属性

广献
2023-03-14

我试图创建一个应用程序,在这个应用程序中,我可以在特定的用户帐户中获取/设置数据,我被Firebase所吸引。

我遇到的问题是,当我的结构如下所示时,我不知道如何针对特定的用户数据:

online-b-cards
  - users
    - InnROTBVv6FznK81k3m
       - email: "hello@hello"
       - main:  "Hello world this is a text"
       - name:  "Alex"
       - phone: 12912912

我环顾四周,找不到任何关于如何访问单个数据的信息,更别提当它们的ID是随机散列的时候了。

我该如何根据用户的名字来获取用户的信息呢?如果有更好的方法,请告诉我!

共有1个答案

郑和泰
2023-03-14

以前,Firebase要求您生成自己的索引或在某个位置下载所有数据,以查找和检索与某个子属性匹配的元素(例如,所有具有name===“alex”用户)。

2014年10月,Firebase通过OrderByChild()方法推出了新的查询功能,使您能够快速高效地执行此类查询。请参阅下面更新的答案。

当将数据写入Firebase时,您有几个不同的选项,这些选项将反映不同的用例。在更高的级别上,Firebase是一个树状结构的NoSQL数据存储,并提供了几个用于管理数据列表的简单原语:

>

  • 使用唯一的已知密钥写入Firebase:

    ref.child('users').child('123').set({ "first_name": "rob", "age": 28 })
    

    使用自动生成的键追加到列表,该键将自动按写入时间排序:

    ref.child('users').push({ "first_name": "rob", "age": 28 })
    

    通过其唯一的已知路径侦听数据中的更改:

    ref.child('users').child('123').on('value', function(snapshot) { ... })
    

    按键或属性值筛选或排序列表中的数据:

    // Get the last 10 users, ordered by key
    ref.child('users').orderByKey().limitToLast(10).on('child_added', ...)
    
    // Get all users whose age is >= 25
    ref.child('users').orderByChild('age').startAt(25).on('child_added', ...)
    

    添加OrderByChild()后,您不再需要为子属性上的查询创建自己的索引!例如,要检索名称为“Alex”的所有用户:

    ref.child('users').orderByChild('name').equalTo('Alex').on('child_added',  ...)
    

    火力点的工程师。当将数据写入Firebase时,您有几个不同的选项,这些选项将反映不同的应用程序用例。由于Firebase是一个NoSQL数据存储,您需要使用唯一的键存储数据对象,以便可以直接访问该项,或者在特定位置加载所有数据并循环遍历每个项以找到您要查找的节点。有关详细信息,请参见编写数据和管理列表。

    在Firebase中写入数据时,可以使用唯一定义的路径设置数据(即a/B/C),也可以将数据Push推入列表,这将生成唯一id(即a/B/ ),并允许您按时间排序和查询该列表中的项目。您在上面看到的唯一id是通过调用push将一个项目追加到online-b-cards/users的列表中生成的。

    这里不使用push,而是建议使用set,并使用唯一的键(如用户的电子邮件地址)存储每个用户的数据。然后,您可以通过Firebase JS SDK导航到online-b-cards/users/ 直接访问用户的数据。例如:

    function escapeEmailAddress(email) {
      if (!email) return false
    
      // Replace '.' (not allowed in a Firebase key) with ',' (not allowed in an email address)
      email = email.toLowerCase();
      email = email.replace(/\./g, ',');
      return email;
    }
    
    var usersRef = new Firebase('https://online-b-cards.firebaseio.com/users');
    var myUser = usersRef.child(escapeEmailAddress('hello@hello.com')) 
    myUser.set({ email: 'hello@hello.com', name: 'Alex', phone: 12912912 });
    

    请注意,由于Firebase不允许引用中包含某些字符(请参见创建引用),我们删除了.,并在上面的代码中用替换它。

  •  类似资料:
    • 如何使用Firebase获取用户名属性,我不知道如何获取用户名、电话号码等属性,我只知道如何获取用户名属性,但不知道用户名属性,也许你可以从下面的Firebase数据库中了解。 这是我的密码

    • 我想使用属性名称获取WooCommerce产品属性的ID。例如 我知道产品属性是分类法,但是get_taxonomy()不会返回分类法ID。我找不到一个可以这样做的Woocommerce函数。

    • 现在,我有两个名称为和名称为的cookie。 我想让这个getter只从义务cookie中获取值。 我该怎么做?因此将数据拆分为单独的值并将其放入数组中。

    • 我使用查询DSL生成实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体。

    • 问题内容: 我有一个多线程应用程序,并且通过属性为每个线程分配了唯一的名称。现在,我希望功能可以使用相应的名称直接访问线程。 类似于以下功能的东西: 上面的函数检查所有正在运行的线程,然后从正在运行的线程集中返回所需的线程。也许我想要的线程被中断了,那么上面的功能将无法正常工作。关于如何整合该功能的任何想法? 问题答案: 您可以使用ThreadGroup查找所有 活动 线程: 获取当前线程的组 通

    • 我需要得到发布内容的用户的名字。我所尝试的一切都将返回ID。我尝试过msg.author等。 编辑:恐怖标题名称smh