查询Firebase实时数据库Swift

时间:2019-03-09 19:55:43

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

如何从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”,我如何获取除当前用户之外的所有其他用户的详细信息?

1 个答案:

答案 0 :(得分:0)

  

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

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

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