【问题标题】:Guaranteed order of fetched data from Firebase Realtime Database从 Firebase 实时数据库中获取数据的保证顺序
【发布时间】:2022-01-09 15:12:15
【问题描述】:

当我不使用任何orderBy() 方法从我的 Firebase 实时数据库中获取数据时,数据的顺序是什么?

如果我使用get(),是否总是 100% 保证我将获得的数据从最旧到最新排序,还是按字典顺序排列键?

【问题讨论】:

    标签: java android firebase firebase-realtime-database google-cloud-platform


    【解决方案1】:

    当我不使用任何 orderBy 方法从 Firebase 实时数据库中获取数据时,数据的顺序是什么?

    如果即使您不使用对orderBy() 的调用,您也希望对元素进行排序,那么您应该使用DatabaseReference#push() 方法提供的推送ID。这些推送的 ID 实际上不是时间戳,但它们包含时间组件。正如 Michael Lehenbauer 在blog article 中提到的那样:

    推送 ID 是在客户端生成的字符串标识符。它们是时间戳和一些随机位的组合。时间戳确保它们按时间顺序排列,随机位确保每个 ID 都是唯一的,即使有数千人同时创建推送 ID。

    回答你的第二个问题:

    如果我使用 get(),是否总是 100% 保证我将获得的数据从最旧到最新排序,还是按字典顺序排列?

    添加ValueEventListenerChildEventListener都没有关系,即使你调用Query#get(),结果都会以相同的方式排序。

    但是,如果您需要根据时间组件显式设置顺序,则应添加“时间戳”类型的属性,如我在以下帖子中的回答中所述:

    如果您想颠倒顺序,请检查以下答案:

    【讨论】:

    • 所以如果我在写的时候使用push(),读的时候数据会按时间顺序排列,对吧?
    • 是的,没错。但请注意,它是按时间顺序升序。如果您需要颠倒顺序,那么您应该使用最后一个 URL 中存在的解决方案。
    • 我只想问最后一件事。当您说添加 ValueEventListener 或 ChildEventListener 或调用 Query#get() 都没有关系时,结果将以相同的方式排序那是什么顺序? 按时间顺序从最旧到最新或按字典顺序
    • “按时间顺序从最旧到最新或按字典顺序”当谈到按键时,这两个实际上是完全相同的。
    • 谢谢,我使用了按键,因为它符合我的要求。
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多