Firebase Swift中的查询排序

时间:2019-05-30 11:46:54

标签: swift firebase firebase-realtime-database

我的实时数据库的结构如下:

test = {"100":271,"updated_at":{"date":"2017-10-14T12:15:52.172Z"},"created_at":{"date":"2017-10-14T12:15:52.172Z"}}

for key,value in test.items():
    if (type(value)) == int:
        test['xx_'+str(key)]=test.pop(key)

我想读取数据库,仅获取user0001发布的帖子,并按最新发布(按时间戳)对其进行排序。

目前,我只能像这样的某个用户获取帖子-

   - Procedure001
        - Post0001
            - user_id: 00001
            - timestamp: 1559214445

如何使用Firebase按时间戳排序?

2 个答案:

答案 0 :(得分:0)

我最终获得了帖子并对其进行了过滤,所以我只使用Firebase来获得特定用户的帖子,然后使用新的Swift 5 sort()函数根据时间戳对它们进行排序-我在该线程上使用了swift 5答案Swift how to sort array of custom objects by property value

答案 1 :(得分:0)

我知道您发布了一个答案,虽然可以使用,但是有一些限制。

如果用户发布了一百万个帖子,尝试加载所有这些帖子并按代码排序可能会使该设备不知所措。即使节点数量较少,让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_timestamp排序的所有uid_0帖子。