从Firestore数据库查询和订购以前的快照

时间:2018-08-16 18:33:13

标签: ios firebase google-cloud-firestore

我正在尝试获取消息传递应用程序的先前/较旧消息。第一次获取是针对一批最新消息。但是当用户向上滚动时,我想获取之前的消息并对其进行排序。

func getOlderMessages () {

    if self.lastSnapshot == nil {return}

    let next = Firestore.firestore().collection("chats/\(self.chat.id!)/messages")

        .order(by: "timestamp", descending: false)
        .limit(to: 10)
        .start(afterDocument: self.lastSnapshot)

    next.getDocuments(completion: { (snapShot, error) in

        for doc in snapShot!.documents {
            let message = Message(doc.data())
            self.chat.messages.insert(message, at: 0)
        }

        self.tableView.reloadData()
        self.refreshControl.endRefreshing()

        guard let last = snapShot?.documents.last else { return }

        self.lastSnapshot = last
    })
}

更新:将降序设置为TRUE似乎可以解决问题……

1 个答案:

答案 0 :(得分:0)

我会查询query cursor。如文档所示,使用startAfterlimit的组合。要触发此负载行为,还需要检测scrollTop == scrollHeight的时间,这是页面应触发先前消息查询的时间。