我正在我的应用程序中编写一个简单的聊天功能。鉴于某些用户在对话中会有多条消息,我需要提供反向分页,以便他们可以在滚动时加载以前的消息。从模型方面来说,每条消息都有一个时间戳(一个时间间隔),因此很容易查询。
我能够从日期字段中查询和订购desc,但是......第二个我将响应限制为X个项目。不知何故,日期字段被省略,我得到集合中的前5个,不是我要按日期排序的5。我该如何解决这个问题?
示例
消息一:1 消息二:2 消息三:3 消息四:4当我订购desc时,我得到了正确的列表[1,2,3,4,5]。当我限制(2)时,它给了我[1,2],但我真正想要的是[3,4]。
我遗失了一些明显的东西?
更新
收集:“对话”。子集“消息”。
集合ID通过聚合两个用户ID来完成,因此查询2个用户的对话更容易。
db.collection("conversations")
.document(identifier)
.collection("messages")
.order(by: "sentDate", descending: false)
.limit(to: 5)
.addSnapshotListener({ snapshot, error in
guard let document = snapshot else { return }
let messages = document.documents.map {
return Message.fromJSON($0.data())
}
observable.onNext(messages as! [Message])
observable.onCompleted()
})
答案 0 :(得分:0)
如果您在 .order(by: "sentDate",Descing: false) 期间得到 [1,2,3,4],
和 [1,2] 使用 .order(by: "sentDate",Descing: false).limit(to: 2) 时, 那么您可以执行以下操作:
(ie. let messages = document.documents.reverse().map line in your code)
你会得到 [3,4]。