未使用orderBy()时Firebase Realtime Database获取数据的顺序相关问题
Firebase Realtime Database 排序问题解答
问题1:未使用orderBy()方法时的返回数据排序规则
- 未显式调用任何
orderBy*()方法(包括orderByKey()、orderByValue()、orderByChild()等)拉取节点数据时,默认返回的子节点排序遵循以下规则:- 所有可解析为32位整数的字符串键,优先按数值升序排列
- 剩余无法解析为整数的字符串键,按字典序升序排列
- 该默认排序和数据的写入时间、写入顺序完全无关,仅由子节点的键决定。
问题2:get()方法是否默认按数据写入从旧到新排序
不能100%保证按从旧到新的顺序返回数据。
get()方法本身没有内置按写入时间排序的逻辑,它的排序规则完全由你指定的排序方法决定:- 如果你没有指定任何排序规则,
get()返回的数据遵循上面提到的「默认按键排序」规则,和写入时间无关,不会自动按写入先后排序 - 只有当你满足以下两种情况之一时,才会得到按写入时间从旧到新排序的结果:
- 存储数据时额外新增了时间戳字段,拉取时显式调用
orderByChild("你的时间戳字段名")排序 - 所有子节点的键都是通过
push()方法生成的:push()生成的字符串键本身内置了时间戳信息,默认按orderByKey()排序时结果会和写入先后顺序一致,但这是push()键的特性,不是get()方法自带的排序逻辑。
- 存储数据时额外新增了时间戳字段,拉取时显式调用
- 如果你没有指定任何排序规则,
内容的提问来源于stack exchange,提问作者jpizarra
相关产品推荐
相关产品推荐

