使用自定义起点接收有限查询

我正在用带有firebase实时数据库的swift for iOS构建一个基本的聊天应用程序。 观察消息的限制为至少10.现在,我想实现加载早期发送消息的function。 目前我正在尝试使用此function实现此目的:

let query = threadRef.child("messages").queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toLast: 2) 

哪个返回此查询:

 (/vYhNJ3nNQlSEEXWaJAtPLhikIZi1/messages { i = ".key"; l = 2; sp = 2; vf = r; }) 

这应该给我数据:

 query.observeSingleEvent(of: .value, with: { (snap) in 

但它只是限制查询而不是将起点设置为特定位置。

这是firebase数据库结构:

 messages -Kgzb3_b26CnkTDglNd8 date: senderId: senderName: text: -Kgzb4Qip6_jQdKRWFey -Kgzb4ha0KZkLZeBIaxW -Kgzb577KlNKOHxsQo9W -Kgzb5cqIVMhRmU019Jf 

任何人都知道如何实现这样的function?

好吧,我终于找到了一种方法来做我想要的。 首先,我误解了从Firebase访问数据的方式。 这是我现在获得查询的方式:

 let indexValue = messages.first?.fireBaseKey let query = messageRef.queryOrderedByKey().queryEnding(atValue:indexValue).queryLimited(toLast: 3) 

1)获取我之前保存到我的自定义聊天消息的FireBase密钥

2)构造查询:

  • 按键订购
  • 将结尾设置为最旧的消息
  • 限制数组查询到所需的长度

然后实际获得我使用的查询:

  query.observeSingleEvent(of: .value, with: { snapshot in for child in snapshot.children.dropLast().reversed() { let fireSnap = (child as! FIRDataSnapshot) //do stuff with data } }) 

1)将查询作为单个事件获取

2)迭代孩子,我需要dropLast()以确保我没有任何重复的消息并反转它以获得正确的顺序。

3)将当前子进程转换为FIRDataSnapshot以访问数据

因为我找不到一个简单的例子,所以我想我把解决方案留在这里,以防其他人遇到同样的问题。