2016-09-26 75 views
1

我需要能够从Firebase上的我的数据库中随机选择一些数据。对于这一点,以避免下载整个数据库,我想通过一个unsigned int就像这个截图所示的键创建条目:从Firebase中的最后一个孩子处获得密钥

enter image description here

我的问题是,我怎么能检索关键最后一个项目的添加?

我想:

ref.queryOrderedByKey().queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { [unowned self] snapshot in 
    let id: UInt64 
    if snapshot.exists(), let child = snapshot.children.nextObject() as? FIRDataSnapshot { 
     id = UInt64(child.key)! 
    } else { 
     id = 1 
    } 
}) 

UInt64(child.key)!,不管我用queryLimited(toFirst:)queryLimited(toLast:),总是返回1

我该怎么办错了吗?

+0

似乎问题来自'observeSingleEvent'。当使用'observe'代替时,我得到预期的密钥。 – Nico

回答

1

您的查询返回第一个结果,其中包含键1。您正在寻找queryLimited(toLast: 1)

此外,在大多数情况下,您应该avoid numeric, sequential keys in distributed data

+0

正如我所说,即使'queryLimited(toLast:1)'它仍然返回1而不是2.我知道有一个数字顺序键是不是一件好事,但我没有找到另一种方式,然后才能够随机从Firebase中检索数据。 – Nico