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 也会将它们存储(并排序)为字符串。
这意味着你截图中的2
、3
、4
等实际上是"2"
、"3"
、"4"
等等。这会影响它们的排序方式,因为字符串是按 lexicographically 排序的,按照这个顺序,这些键将显示为 "3"
、"30"
、"4"
、"44"
, "5"
, 等等
如果您想使用可以按数字排序的键,请执行以下步骤:
- 使用短的非数字前缀作为前缀键,以防止 Firebase 将它们解释为数组。
- 对所有键中的数字使用固定长度,根据需要在值前加上零或空格。
合并后,您的密钥将显示为:
"key_003": ...,
"key_004": ...,
...
"key_008": ...,
"key_016": ...,
"key_018": ...,
"key_030": ...,
"key_044": ...
您现在可以在通过调用 queryOrderedByKey()
.
查询 /FOLLOW/Follower/2
时可靠地对其进行排序
如果子值是字符串,是否可以在子值之后查询?按字母顺序排列? 不管是下降还是上升。 例如在键下,每个引用都有追随者的指定名称,我想按字母顺序排列所有追随者。 不幸的是,只能设法查询它按整数排序。 (包括分页)
如果这不起作用,有没有办法按键查询?例如我有键 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 也会将它们存储(并排序)为字符串。
这意味着你截图中的2
、3
、4
等实际上是"2"
、"3"
、"4"
等等。这会影响它们的排序方式,因为字符串是按 lexicographically 排序的,按照这个顺序,这些键将显示为 "3"
、"30"
、"4"
、"44"
, "5"
, 等等
如果您想使用可以按数字排序的键,请执行以下步骤:
- 使用短的非数字前缀作为前缀键,以防止 Firebase 将它们解释为数组。
- 对所有键中的数字使用固定长度,根据需要在值前加上零或空格。
合并后,您的密钥将显示为:
"key_003": ...,
"key_004": ...,
...
"key_008": ...,
"key_016": ...,
"key_018": ...,
"key_030": ...,
"key_044": ...
您现在可以在通过调用 queryOrderedByKey()
.
/FOLLOW/Follower/2
时可靠地对其进行排序