【发布时间】:2017-10-31 15:20:00
【问题描述】:
我正在创建一个 instagram 风格的提要,并试图弄清楚如何根据您关注的人对帖子进行分页。
我的数据结构如下:
posts:
user1:
post1
post2
user2:
post3
post4
user3:
post5
post6
post7
user-following:
user1:
user2
user3
所以帖子是由创建帖子的用户组织的。我也有一个当前用户关注的人的结构。所以我抓取当前用户关注的用户的 uid,然后转到帖子部分并获取这些用户的所有帖子,每个帖子都有一个 createdAt 值。
当我使用 queryByChild("createdAt") 时,它对每个用户的数据进行排序,而不是绝对排序。 因此,它对 user2 的帖子进行排序,然后是 user3 的帖子,而不是进行绝对排序,因为它以块的形式提取数据。
我需要独立于拥有新闻提要帖子的用户的最新整体帖子。我可以在快照中获取所有帖子信息,但是有没有办法对该快照进行排序?我需要找到一种方法让数据库将信息作为一个整体而不是大块进行排序,然后从该排序列表中提取最新的“x”个帖子。
否则我必须将所有内容拉入我的程序,然后将其排序到一个数组中,然后从数组中拉出最近的“x”个帖子进行分页。问题是,如果有 1000 个帖子,那将是一个巨大的数据拉动,会使应用程序超级慢并可能崩溃。有什么建议吗?
【问题讨论】:
-
Firebase 文档非常有用。查看Work with Lists of Data on iOS,其中声明 queryLimitedToLast:设置从有序结果列表的末尾返回的最大项目数。 在这种情况下,将其设置为 15,这将返回 15 'most最近的帖子。将来,请在您的问题中包含有问题的代码以及您的 Firebase 结构(作为 TEXT)。您可能想查看How to create a Minimal, Complete, and Verifiable example
-
@Dirty 如果您想让 Jay 查看您的回复,请在 cmets 中使用“@Jay”
-
@Jay 谢谢你的回复。我的问题更深入一点,我必须获取用户关注的人的帖子。因此查询将每个用户的帖子放在一个块中,然后转到下一个用户,等等。因此,一旦观察到所有数据,它就不会对帖子进行排序,而是以块的形式。因此,帖子不会被绝对排序,而只能由每个单独的用户排序。有没有办法简单地在快照中一次获取所有数据,然后对其进行排序,然后提取最后 15 个?
-
当然。但这可能是大量数据,超出了设备的容量,还会导致 UI 缓慢。查看您的结构,您可以简单地将观察者添加到每个用户感兴趣的每个帖子/用户。即 user1 将在 user2 和用户 3 上添加观察者。因此,随着帖子的添加,他们将在事件中接收帖子.每个人只能获得最后 15 个。但是,这可能不是您想要的,因此在您的问题中添加代码将有助于我们理解此用例。
-
@Jay,我稍后会尝试在这里发布一些代码,但是是的,这并不能解决问题。帖子仍然会从用户到用户进行排序,而不是绝对排序。我需要一种方法来查看用户关注的人的所有帖子,然后在数据库中对其进行排序,然后从数据库中提取最后“x”数量的帖子。感觉这是 NoSQL 后端的一个大问题。在 SQL 系统中,我觉得您可以将关注的人和他们所有的帖子进行连接,然后排序,然后提取数据。
标签: ios swift firebase pagination firebase-realtime-database