Swift 5 Firebase queryOrderedBy 字符串值

Swift 5 Firebase queryOrderedBy String value

如果子值是字符串,是否可以在子值之后查询?按字母顺序排列? 不管是下降还是上升。 例如在键下,每个引用都有追随者的指定名称,我想按字母顺序排列所有追随者。 不幸的是,只能设法查询它按整数排序。 (包括分页)

如果这不起作用,有没有办法按键查询?例如我有键 1“-edasMmaed”和键 2“-deLkdnw”等,如果进行分页,我会在最后一个值之后开始吗? 不幸的是,我没有找到任何有用的东西。

亲切的问候

编辑:这是问题的第一部分

编辑 2:

        var query = Ref().databaseFollowingForUser(uid: userId, type: type).queryOrderedByKey()
    
    if let latestUserFollowers = uid, latestUserFollowers != 0 {
        query = query.queryEnding(atValue: latestUserFollowers).queryLimited(toLast: limit)
    } else {
        query = query.queryLimited(toLast: limit)
    }

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

使用此代码我收到前 10 个结果(限制定义为 10) 来自 ID:276 到 ID:18 的所有人。(从 holgerhagerson 开始到 manni85 结束)

现在我想分页并加载更多,但我还不能。

传入的uid为最新获取用户的uid为“18”,manni85

大编辑:我设法按键订购了它。阅读你关于键总是保存为字符串的答案,我意识到我的错误并且现在能够正确地做到这一点。

非常感谢!

Firebase 实时数据库中的键以字符串形式存储(和排序)。即使它们看起来像数字,Firebase 也会将它们存储(并排序)为字符串。

这意味着你截图中的234等实际上是"2""3""4"等等。这会影响它们的排序方式,因为字符串是按 lexicographically 排序的,按照这个顺序,这些键将显示为 "3""30""4""44", "5", 等等

如果您想使用可以按数字排序的键,请执行以下步骤:

  1. 使用短的非数字前缀作为前缀键,以防止 Firebase 将它们解释为数组。
  2. 对所有键中的数字使用固定长度,根据需要在值前加上零或空格。

合并后,您的密钥将显示为:

"key_003": ...,
"key_004": ...,
...
"key_008": ...,
"key_016": ...,
"key_018": ...,
"key_030": ...,
"key_044": ...

您现在可以在通过调用 queryOrderedByKey().

查询 /FOLLOW/Follower/2 时可靠地对其进行排序