android - 如何获取多条路径并对它们进行排序并将结果带回 firebase?

标签 android firebase firebase-realtime-database

我试图了解如何获取 ID 列表,然后要求 Firebase 获取每条路径并按日期对它们进行排序,并在一次 Firebase 调用中将前 20 名全部带回。目前,我正在通过遍历 ID 并获取每条路径来执行此操作——将项目添加到列表中,然后对它们进行排序。

然而,这是低效的,尤其是当列表变大时。

我的数据看起来像这样:

follows: {
  UserId :{
    projId1: true,
    projId2: true
  }
}

projects: {
  projId1 :{
    title: SomeText,
    date: TimeStamp
  }
}

最佳答案

Firebase 查询在一个特定位置运行,它只能对存在于该位置子项下的固定路径中的数据进行排序。无法对存在于不同路径的数据的 Firebase 查询进行排序。

因此,在您的情况下,如果您从 /follows/$uid 加载数据,则无法对来自 /projects 节点的数据的结果进行排序。

这给你留下了两个选择:

  1. 在客户端对数据进行排序

  2. follows child 的排序属性上

只要您的数据集不是太大并且您没有过滤太多,在客户端上对数据进行排序是一个有效的选择。

但要允许在服务器上排序,您必须在您查询的节点下复制相关属性:

follows: {
  UserId :{
    projId1: TimeStamp,
    projId2: TimeStamp
  }
}

projects: {
  projId1 :{
    title: SomeText,
    date: TimeStamp
  }
}

使用此结构,您可以按时间戳排序项目

Query query = database.child(user.getUid()).orderByValue();
query.addChildEventListener(...

关于android - 如何获取多条路径并对它们进行排序并将结果带回 firebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40205388/

相关文章:

firebase - 在 Firebase 中缓存

android - ImageView 和 TextView 左右对齐怎么办?

android - 如何从自定义属性中引用 android 属性 layout_width?

java - Android 4.4 短信设置时间

node.js - Firebase 存储文件下载在一段时间后停止工作

swift - 删除 tableView 单元格,并从 firebase 中删除数据

json - 在 JSON 树数据库中存储聊天的最佳方式?

java - 在不同用户上创建地理围栏

java - Android - 检索存储在 Cloud Firestore 文档中的自定义对象

swift - 如何使用操作存储特定单元格的数据?