gpt4 book ai didi

java - Firebase 实时查询 startAt 和 endAt 在联合属性上未按预期工作

转载 作者:行者123 更新时间:2023-12-02 01:18:45 25 4
gpt4 key购买 nike

我有一个联合属性,用于一次查询多个值。它看起来像这样:

enter image description here

这是我的查询代码:

rootRef.child("leagues")
.orderByChild("division_size")
.startAt("1_1")
.endAt("1_10")
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
log.error("League Available")
} else {
log.error("League Not Available")
}
}

override fun onCancelled(error: DatabaseError) {
log.error("Failed to read value.", error.toException())
}
})

请注意,startAt 的“division_size”大小为 1,endAt 为 10。这给了我不正确的结果,当我这样做时快照不存在,但当我将 endAt 的大小切换为 9 或任何单个数字时然后就可以了。

如何让它适用于所有数字,比如说 1 到 100?

最佳答案

问题是由于 lexicographic order 中字符串的排序方式造成的。字符串在排序时不考虑任何类型的数值,即使字符串可能包含数字。他们只查看各个字符的 UTF-8(或 ascii)值。您的分区大小字符串排序如下:

  1. 1_1
  2. 1_10
  3. 1_2
  4. 1_21
  5. ...
  6. 1_9

看到图案了吗?第三个字符按 ascii 值排序,而不是按嵌入数字的值排序。

我建议使用不同的系统对数据库子项进行排序,该系统仅考虑数字而不考虑字符串。由于我不知道你的 split_size 字符串的属性,所以很难推荐一些东西。但我认为你可以弄清楚你需要做什么(同样,它不会涉及字符串,只涉及数字,可能在不同的子值中)。

关于java - Firebase 实时查询 startAt 和 endAt 在联合属性上未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58140035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com