订购Firebase帖子按时间顺序Swift

时间:2017-10-29 21:43:00

标签: swift uitableview firebase firebase-realtime-database

我已经向firebase添加了帖子,我想知道如何根据用户发布的时间按时间顺序提取帖子。

我的数据库设置如下enter image description here

评论后的第一个节点是用户ID,然后帖子位于其下方。显然,这些帖子是有序的,但是如果一个新用户发布了一些内容,那就是发布"和另外1"例如,我如何拉它,以便它介于两者之间。

有没有办法删除autoID并只使用userID作为密钥?我遇到的问题是之前的帖子被覆盖了。

我接受答案,因为它是最彻底的。我为解决我的问题所做的只是创建唯一键作为第一个节点,然后将UID用作子项,将注释用作子项。然后我按顺序拉出唯一键,找到与uid相关的注释。

3 个答案:

答案 0 :(得分:0)

您不能将userID用作键值而不是autoID,因为键必须是唯一的,这就是为什么Firebase只更新值而不添加另一个具有相同键的值。通常情况下,默认情况下Firebase节点按时间顺序排序,因此如果您提取值,则这些节点应按正确顺序排列。但是,如果您想确定这一点,可以添加时间戳值并设置服务器时间戳。在提取数据之后,您可以通过该时间戳订购它(我认为实际上有一个时间戳由firebase自动保存,您可以以某种方式访问​​它,但您需要在文档中查找)。如果我做对了,为了完成你想要的,你需要改变数据库的结构。例如,您可以使用autoID,但如果需要,可以将想要用作键的用户ID保存为值。希望我的想法是正确的,如果不是更精确,我会尽力帮助。

答案 1 :(得分:0)

Firebase密钥默认情况下按时间顺序 - 它内置于密钥生成算法中。我认为您需要重新构建/重新考虑您的数据。

您的 POSTS 数据库应该(可能)在每个帖子中列出评论,然后如果需要,您可以复制用户记录,以便在需要用户访问时更快地进行检索。如下所示:

POSTS
  - post (unique key)
    - title (text)
    - date (timestamp)
    - comments
      - comment (unique key)
        - text (text)
        - user_id (user key)
        - date (timestamp)

当你提取评论时,你不应该从一堆不同的用户中提取它们。这可能会导致很多查询和的加载时间。相反,评论可以(按时间顺序)添加到帖子对象本身,如果你想在那里保留引用,也可以添加到用户。与MySQL不同,NoSQL数据库可以有相当多的数据重复。

答案 2 :(得分:0)

其他答案都有其他优点,但更完整的解决方案包括对帖子加时间戳和denormalizing your data,以便可以查询(假设在某些时候会查询)。在Firebase中,奉承更好。

gl.bufferData(gl.ARRAY_BUFFER, genericPolygonArrayBufferView.buffer, gl.STATIC_DRAW);

通过这种结构,我们可以

posts
   post_0
     title: "Posts And Posting"
     msg: "I think there should be more posts about posting"
     by_uid: "uid_0"
     timestamp: "20171030105500"
     inv_timestamp: "-20171030105500"
     uid_time: "uid_0_ 20171030105500"
     uid_inv_time: "uid_0_-20171030105500"

comments:
   comment_0
     for_post: "post_0"
     text: "Yeah, posts about posting are informative"
     by_uid: "uid_1"
     timestamp: "20171030105700"
     inv_timestamp: "-20171030105700"
     uid_time: "uid_1_20171030105700"
     uid_inv_time: "uid_1_-20171030105700"
   comment_1
     for_post: "post_0"
     text: "Noooo mooooore posts, please"
     by_uid: "uid_2"
     timestamp: "20171030110300"
     inv_timestamp: "-20171030110300"
     uid_time: "uid_2_20171030110300"
     uid_inv_time: "uid_2_-20171030110300"

我在其中抛出了一些其他键:值对来将其四舍五入:复合值,查询升序和降序,时间戳。