【问题标题】:Query Firebase Real-Time Database Swift查询 Firebase 实时数据库 Swift
【发布时间】:2019-07-31 13:23:40
【问题描述】:

如何从 Firebase 上的实时数据库中获取除当前用户之外的所有用户的详细信息?

我一直在尝试为我的数据库创建一些查询,但没有成功。这是第一次在 Firebase 中处理查询,发现它们有点混乱。

我的数据库结构如下:

-> users

    ->profile
        ->uid1
            ->email : "some@email.com"
            ->name : "some_name"
            ->favourite
               ->id1
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id1"
               ->id2
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id2"
        ->uid2
            ->email : "some@email.com"
            ->name : "some_name"
            ->favourite
               ->id1
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id1"
               ->id2
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id2"
        ->uid3
            ->email : "some@email.com"
            ->name : "some_name"
            ->favourite
               ->id1
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id1"
               ->id2
                   ->title : "some_title"
                   ->date : "some_date"
                   ->id : "id2"

这是我尝试过的:

 Database.database().reference().child("users/profile")
      .queryOrdered(byChild:  "username")
      .queryStarting(atValue: searchBar.text!)
      .queryEnding(atValue: searchBar.text! + "\u{f8ff}")
      .observeSingleEvent(of: .value, with: { (snapshot) in

假设我登录的用户的用户 ID 为“uid1”,我如何获取除当前用户之外的所有其他用户的详细信息?

【问题讨论】:

  • 展示你是如何尝试解决这个问题的。显示您的代码。

标签: ios json swift firebase firebase-realtime-database


【解决方案1】:

如何获取除当前用户之外的所有其他用户的详细信息?

没有特定的 API 可以检索“除此之外的所有子节点”。这意味着您有几个选择:

  1. 检索所有子节点,并排除用户自己的节点客户端。这是迄今为止最常见的方法,因为随着(用户)节点总数的增加,您读取的一个额外节点的开销可以忽略不计。
  2. 检索两个范围的子节点:当前用户之前的和之后的。这要求您知道当前用户之前和之后的节点 ID。如果你这样做,你可以做一个ref.orderByKey().endAt(idOfUserBefore)ref.orderByKey().start(idOfUserAfter)
  3. 检索所有其他子节点作为单独调用。这要求您知道每个子节点的 ID。但是,如果您知道这一点,那么自从Firebase pipelines the calls over a single connection 以来,它并不像您想象的那么贵。

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多