Firebase orderBy asc升序查询为何无法正确排序1与120?
Firebase 集合orderBy排序异常解决方案
问题根源
排序异常不是因为1和120无法直接比较,核心问题是你文档里的chapterNumber字段存的是字符串类型,不是数字类型。
字符串排序是逐位对比字符的ASCII编码,不会按数值整体大小判断顺序。比如对比字符串"120"和"2"时,第一位字符'1'编码小于'2',就会直接判定"120"排在"2"前面,完全不符合数值排序的逻辑。
你写的查询语句本身没有错误:
collection("my-book") .orderBy("chapterNumber", "asc")
修复方法
- 完全不需要用补零存储的方案(比如把1存成
"001"),这种方案扩展性极差,后续章节数超过你补零的位数时,得全量改所有存量数据,维护成本很高。 - 正确做法:把所有文档里的
chapterNumber字段类型统一改成数字类型,存的时候直接存数值1、2、3、20、30、33、120,不要加引号转成字符串。改完之后你原来的查询不用做任何修改,就能返回你预期的升序结果。
异常排序结果示例

内容的提问来源于stack exchange,提问作者wick3d
相关产品推荐
相关产品推荐

