Firebase RTDB queryLimited 返回意外的 null

Firebase RTDB queryLimited returning unexpected null

提问人:Matthew So 提问时间:9/28/2023 最后编辑:Frank van PuffelenMatthew So 更新时间:9/28/2023 访问量:91

问:

假设有 Firebase RTDB JSON,例如:

"lastMessages": {
  "uid1": {
    "chatId1": {
      "i": 1695829905,
      "s": false
    },
    "chatId2": {
      "i": 1695829916,
      "s": false
    },
    "chatId3": {
      "i": 1695829937,
      "s": false
    }
  },
}

我在 Swift 中有一个观察者,例如:

Database.database().reference().child("lastMessages").child(user?.uid ?? ".")
    .queryOrdered(byChild: "i")
    .queryLimited(toLast: 1)
    .observe(.value) { snapshot in
        print("snapshot: ", snapshot)
    }

然后控制台说它是零,如下所示:

snapshot: Snap (uid1) <null>

虽然我期望的是检索 chatId3 的快照,它在升序中具有最大的“i”值。谁能帮忙解释为什么我得到 null 而不是 chatId3?

iOS Swift Firebase-实时数据库

评论

0赞 Hezy Ziv 9/28/2023
我的猜测是 orderby 和有限组合,尝试删除一个或两个,看看你是否得到了整个列表。Firebase 应该对 item 进行排序,但出于某种原因,Firebase 不保证在您检索节点时会以任何特定顺序返回节点的子节点。(尝试移动到 Firestore)
0赞 Matthew So 9/28/2023
感谢您的评论。我在删除查询时获得了整个列表,因此假设它是关于 queryLimited 的。根据文档,在这种情况下,快照按升序排序(带有数值的orderedByChild)。.
1赞 Matthew So 9/28/2023
我发现它在添加queryEnding(atValue: Date().timeIntervalSince1970)时按预期工作,但试图找出原因。
0赞 Frank van Puffelen 9/29/2023
Firebaser 这里很高兴听到您找到的解决方法。👍 --- 你的代码乍一看还不错,所以我也请了一位队友来研究一下。他们能够复制你得到的东西,所以现在正在进一步调查。如果我们发现任何结论性的东西,我们中的一个人会在这里发帖。
0赞 Matthew So 9/29/2023
哦,谢谢弗兰克!我期待着您/他们的回复。仅供参考,您可能知道这一点,但是当它可以帮助您验证时,我得到了 1 个快照元素(没有 queryEnding 运算符)(没有 queryEnding 运算符)。

答: 暂无答案