【发布时间】:2018-08-19 04:13:33
【问题描述】:
我正在我的应用程序中编写一个简单的聊天功能。鉴于某些用户在对话中会有多条消息,我需要提供反向分页,以便他们可以在滚动时加载以前的消息。在模型方面,每条消息都有一个时间戳(一个时间间隔),以便于查询。
我可以从日期字段查询和订购 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()
})
【问题讨论】:
-
请在您的问题中包含您的查询/查询的实际代码。查看您正在查询的集合/文档也将有所帮助。
-
我更新了我原来的问题,谢谢@FrankvanPuffelen
-
我想我想要的是 limitToLast ?事物类型
-
实时数据库的
limitToLast()没有等效项。相反,您必须颠倒排序顺序,然后重新颠倒客户端中的项目。见stackoverflow.com/questions/48342525/… -
@FrankvanPuffelen 但这不会破坏分页吗?
标签: swift google-cloud-firestore