【发布时间】:2022-01-09 15:12:15
【问题描述】:
当我不使用任何orderBy() 方法从我的 Firebase 实时数据库中获取数据时,数据的顺序是什么?
如果我使用get(),是否总是 100% 保证我将获得的数据从最旧到最新排序,还是按字典顺序排列键?
【问题讨论】:
标签: java android firebase firebase-realtime-database google-cloud-platform
当我不使用任何orderBy() 方法从我的 Firebase 实时数据库中获取数据时,数据的顺序是什么?
如果我使用get(),是否总是 100% 保证我将获得的数据从最旧到最新排序,还是按字典顺序排列键?
【问题讨论】:
标签: java android firebase firebase-realtime-database google-cloud-platform
当我不使用任何 orderBy 方法从 Firebase 实时数据库中获取数据时,数据的顺序是什么?
如果即使您不使用对orderBy() 的调用,您也希望对元素进行排序,那么您应该使用DatabaseReference#push() 方法提供的推送ID。这些推送的 ID 实际上不是时间戳,但它们包含时间组件。正如 Michael Lehenbauer 在blog article 中提到的那样:
推送 ID 是在客户端生成的字符串标识符。它们是时间戳和一些随机位的组合。时间戳确保它们按时间顺序排列,随机位确保每个 ID 都是唯一的,即使有数千人同时创建推送 ID。
回答你的第二个问题:
如果我使用 get(),是否总是 100% 保证我将获得的数据从最旧到最新排序,还是按字典顺序排列?
添加ValueEventListener或ChildEventListener都没有关系,即使你调用Query#get(),结果都会以相同的方式排序。
但是,如果您需要根据时间组件显式设置顺序,则应添加“时间戳”类型的属性,如我在以下帖子中的回答中所述:
如果您想颠倒顺序,请检查以下答案:
【讨论】: