Swift 5 Firebase queryOrderedBy 字符串值

Posted

技术标签:

【中文标题】Swift 5 Firebase queryOrderedBy 字符串值【英文标题】:Swift 5 Firebase queryOrderedBy String value 【发布时间】:2022-01-10 17:22:58 【问题描述】:

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

如果这不起作用,有没有办法通过键查询?例如我有键 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

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

非常感谢!

【问题讨论】:

我不确定我是否理解您的要求。您能否编辑您的问题以显示您想要查询的数据库结构,以及您已经尝试过的sorting and filtering operations 的代码? 当然!我添加了结构的图像 我要么想让它按数字排序(不需要降序,我听说firebase会按字母顺序排列,但只要我能够正确分页它对我来说并不重要!而且提前致谢! "按数字排序" 这里的“它”是什么?您要订购的“数字”是什么?如果您准确地展示您正在尝试做的事情(例如通过展示您已经拥有的代码)以及您期望的输出,我们更有可能提供帮助。 【参考方案1】:

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

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

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

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

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

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

当您通过调用queryOrderedByKey() 查询/FOLLOW/Follower/2 时,您现在可以可靠地排序。

【讨论】:

嘿,谢谢!如果它按字典顺序排列,它对我来说是最重要的!我将如何实现这一目标?因为我现在无法更改数据库,因为它已经与应用程序一起使用 我描述的是数据库是如何工作的。没有办法改变它。 不,我的意思是如何按字典顺序对其进行分页。我得到 3、30、4、44,然后如果我不能加载更多,我得到 5、55 等 我不确定我是否理解。您可以将您的问题编辑为:1) 使用我在对您的问题的评论和我的回答中链接的 API 显示您已经尝试过的代码? 2)你从数据库中得到的结果是什么? 3) 你期望得到的结果是什么?

以上是关于Swift 5 Firebase queryOrderedBy 字符串值的主要内容,如果未能解决你的问题,请参考以下文章

更新 Firebase 中的值

如何监听 Firebase 任务完成?

swift 5.1 Xcode iOS中的firebase服务类

Swift 如何为使用 Firebase 投票的用户添加 5 星评分

将 async/await (Swift 5.5) 与 firebase 实时数据库一起使用

在 Firebase 中获取有限数量的记录