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 也会将它们存储(和排序)为字符串。
这意味着您的屏幕截图中的2
、3
、4
等实际上是"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 字符串值的主要内容,如果未能解决你的问题,请参考以下文章
swift 5.1 Xcode iOS中的firebase服务类
Swift 如何为使用 Firebase 投票的用户添加 5 星评分