【问题标题】:Query latest entries using Firebase in Swift在 Swift 中使用 Firebase 查询最新条目
【发布时间】:2017-06-05 12:42:30
【问题描述】:

我是使用 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”替换为“fieldThatDoesntExist”时,我得到了完全相同的结果。

有人会知道我在代码中哪里做错了吗?提前致谢!

【问题讨论】:

  • 我解决了它改变我的日期格式,我像 2016/12/23, 2016/12/13, 2017,01/16 一样使用它。我看到你的代码是正确的。但我不知道您使用的时间格式以及是否可以按顺序对其进行排序。
  • 感谢@MagoNicolasPalacios 的回答。我想日期格式应该不是问题,因为它是一个 Double 变量,查询应该从最大的 Double 到最小的排序结果。我仍然认为我的查询中有些地方不正确:-/
  • 也许你是对的,而且你需要先将de输入到你拥有的ID child,然后按照child排序查询。
  • 是的,我也在考虑这个问题,但我不知道如何动态获取我要列出的条目的键...
  • 您应该首先为图片子项的每个循环输入一个以获取其所有 ID,然后按日期排序。

标签: swift firebase firebase-realtime-database


【解决方案1】:

查询以正确的顺序返回项目。但很可能(您的问题中似乎缺少相关代码)当您将快照转换为字典(根据定义无序)时,您会丢失该顺序。

要使项目保持正确的顺序,请遍历snapshot.children:

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
      }        
})

另见:

【讨论】:

    【解决方案2】:

    实际上,在对查询返回的数组进行排序后:

    picturesArr.sort(by: {$0.createdTime > $1.createdTime})
    

    我发现查询返回了我正在查找但未排序的条目。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 2021-05-12
      • 1970-01-01
      • 2011-07-25
      • 2018-03-05
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多