【问题标题】:Paginate with Descending Timestamp in Firestore在 Firestore 中使用降序时间戳进行分页
【发布时间】:2020-12-20 01:44:09
【问题描述】:

我无法按 Firestore 中的降序时间戳对数据进行分页(首先获取最新的)。当我订购时

Firestore.firestore().collection("items")
        .order(by: "date", descending: true)
        .limit(to: 3)

它可以工作,但如果我尝试刷新它只会加载相同的数据。分页我试过了

Firestore.firestore().collection("items")
        .order(by: "random", descending: true)
        .start(after: [lastFetchedItem?.random ?? ""])
        .limit(to: 1)

它基于随机数生成器获取数据,并且每次都完美地分页,所以我知道它是可能的。现在如果我尝试

Firestore.firestore().collection("items")
        .order(by: "date", descending: true)
        .start(after: [lastFetchedItem?.date ?? ""])
        .limit(to: 1)

我加载了第一项,但无法分页到下一项。我用 Timestamp(date: Date()) 记录时间戳,在我的字典中我的日期写成

var date: Date?
    
    init(dictionary: [String: Any]) {
        self.date = dictionary["date"] as? Date
    }

【问题讨论】:

  • 加载额外页面的机制是什么(当用户滚动到底部、点击按钮等时)?

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

要分页,请传入上一页最后一项的整个快照。像你一样传递单个值是行不通的。

所以如果你的lastFetchedItem 是文档快照:

Firestore.firestore().collection("items")
        .order(by: "date", descending: true)
        .start(after: lastFetchedItem)
        .limit(to: 1)

【讨论】:

    【解决方案2】:

    我最终将日期字段格式化为 unix 时间戳,这给了我一个 Int,就像我对 .random 所做的那样。然后我按日期订购。完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2018-09-21
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多