Swift - 创建(全部)以下用户如何在Firebase中提供内容?

时间:2016-06-10 16:56:15

标签: ios swift firebase firebase-realtime-database

我希望以下用户使用.indexOn获取最新帖子:timestamp(我使用UTC时间执行此操作)但我不知道如何根据时间戳同时对以下帖子进行过滤在这种情况下能够正确使用 limitToLast 吗?

posts
   post_id_0
      timestamp: _
      ownerID: user_id_0
   ...


users
   user_id_0
      following
         user_id_0: true
         user_id_1: true
      followers
         user_id_x: true
         user_id_y: true
   ...

1 个答案:

答案 0 :(得分:1)

如果您想按时间戳排序并将其限制为最后一个(这将是最新的)

    let postsRef = self.myRootRef.childByAppendingPath("posts")

    postsRef.queryOrderedByChild("timestamp").queryLimitedToLast(1)
       .observeSingleEventOfType(.Value, withBlock: { snapshot in
        if ( snapshot.value is NSNull ) {
            print("not found")

        } else {
            for child in snapshot.children {

                let q = child.value["ownerID"] as! String
                print(q)
            }

        }
    })

如果我理解了这个问题,您还希望将帖子限制为特定用户。换句话说,您希望获得user_0创建的最新帖子。 (即查询:xx&& yy)

有几种方法可以做到这一点

1)跟踪用户节点中哪些帖子

users
  user_id_0
     following
       xxxx
     followers
       yyyy
     3_most_recent_posts
       post_id_3: true
       post_id_2: true
       post_id_1: true

然后您可以直接获取特定帖子。

2)第二个选项是格式化您的Firebase以匹配您想要的内容:

posts
   post_id_0
       owner_timestamp: user_id_0_20160611081433

然后,在posts节点中查询从user_id_0_开始的值并将其限制为最后一个x

    postsRef.queryOrderedByChild("owner_timestamp")
       .queryStartingAtValue("user_id_0_")
       .queryLimitedToLast(1)
       .observeSingleEventOfType(.Value, withBlock: { snapshot in
        if ( snapshot.value is NSNull ) {
            print("not found")

        } else {
            for child in snapshot.children {

                let q = child.value["ownerID"] as! String
                print(q)
            }

        }
    })