在Swift中使用Firebase查询最新条目

在Swift中使用Firebase查询最新条目,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我刚开始使用Firebase,但我找不到如何做听起来很简单的事情:列出我数据库的所有最新条目 以下是我的数据库的屏幕截图: 所以,我试着列出如下最新条目: // picturesRef = FIRDatabase.database().reference().child("pictures") let _ = self.picturesRef.queryOrdered(byChild: "createdTime").queryLimited(toLast: 50).observ

我刚开始使用Firebase,但我找不到如何做听起来很简单的事情:列出我数据库的所有最新条目

以下是我的数据库的屏幕截图:

所以,我试着列出如下最新条目:

    // picturesRef = FIRDatabase.database().reference().child("pictures")
    let _ = self.picturesRef.queryOrdered(byChild: "createdTime").queryLimited(toLast: 50).observe(.value, with: { snapshot in
        // Stocking the result into picturesArr array
        for elem in picturesArr {
            print(elem.createdTime)
        }
    })
现在,当我显示每个项目的createdTime值时,我有如下内容:

  • 1484738582.0
  • 1484000086.0
  • 1484738279.0
  • 1484734358.0
  • 1484625525.0
  • 1484728677.0
它似乎不是从最旧的条目到最新的条目排序的

此外,当我将查询中的“createdTime”替换为“FieldthatDoesTextist”时,我得到了完全相同的结果


任何人都会知道我在代码中哪里做错了什么?提前谢谢

实际上,在使用以下命令对查询返回的数组进行排序之后:

picturesArr.sort(by: {$0.createdTime > $1.createdTime})
我发现查询返回的是我正在查找但未排序的条目


对我来说,这看起来有点奇怪,也许有人知道为什么,甚至更好,知道如何获得已经排序的结果?

查询将以正确的顺序返回项目。但最有可能的情况是(您的问题中似乎缺少相关的代码),当您将快照转换为字典(定义上是无序的)时,您将失去该顺序

要使项目保持正确的顺序,请迭代快照。子项:

let picturesRef = FIRDatabase.database().reference().child("pictures")
let _ = picturesRef
  .queryOrdered(byChild: "createdTime")
  .queryLimited(toLast: 50)
  .observe(.value, with: { snapshot in
      for child in snapshot.children {
          print(child.key)
          print(child.child("createdTime").value
      }        
})
另见:

  • (我通常尽量避免
    allObjects
    ,但也没关系)

我通过更改日期格式来解决它,我使用它就像2016/12/232016/12/132017,01/16。我看到你的代码是正确的。但是我不知道你使用的是什么时间格式,也不知道它是否能按顺序排序。谢谢@MagoNicolasPalacios的回答。我认为日期格式应该不会有问题,因为它是一个双变量,查询应该将结果从最大的双变量排序到最小的双变量。我仍然认为我的查询中有一些不正确的地方:-/也许你是对的,你需要首先在你的ID child中输入de,然后按child排序查询。是的,我也在考虑这个问题,但我无法找到如何动态获取我试图列出的条目的键…您应该首先为图片的每个循环输入一个,以获得它们的所有ID,然后按日期排序。