我的实时数据库结构如下:
- Procedure001
- Post0001
- user_id: 00001
- timestamp: 1559214445我想读取数据库,只获得user0001发布的帖子,并按最近的帖子排序(按时间戳)。
目前,我只能得到某个用户的帖子,就像这样-
let ref = Database.database().reference().child("Procedure001").queryOrdered(byChild: "user_id").queryEqual(toValue: "0001")如何使用firebase对时间戳进行排序?
发布于 2019-05-30 20:57:52
我最终得到了帖子,并对它们进行了过滤,所以我只使用firebase获得特定用户的帖子,然后使用新的Swift 5 sort()函数根据时间戳对它们进行排序-我在这个线程Swift how to sort array of custom objects by property value上使用了swift 5 answer
发布于 2019-05-31 06:26:23
我知道你发布了一个答案,虽然它可以工作,但有一些限制。
如果用户发布了一百万条帖子,试图加载所有这些帖子并在代码中进行排序可能会使设备不堪重负。即使节点数量较少,让Firebase对数据进行排序并呈现数据也比让应用程序处理所有数据要快得多。
因此,您经常会发现解决方案是根据要运行的查询类型复制数据。在本例中,您有一个节点来存储每个帖子的用户id和时间戳
Procedure
post_0
uid: uid_0
timestamp: 20190529
post 1
uid: uid_0
timestamps: 20190530正如您所提到的,您可以在代码中查询uid_0中的所有帖子并按时间戳排序。但是,看看这个。
user_posts
uid_0
post_0: 20190529
post_1: 20190530通过添加跟踪用户帖子的附加节点,可以消除查询,因为所有帖子都存储在一个位置,并且可以在服务器上轻松排序。
我将抛出另一个选项,即复合值。
Procedure
post_0:
uid_timestamp: uid_0_20190529
post_1:
uid_timestamp: uid_0_20190530使用此结构,您可以查询所有uid_0的帖子,按uid_timestamp排序。
https://stackoverflow.com/questions/56377720
复制相似问题