如何抓取多个路径并对它们进行排序并将结果恢复到firebase中?

时间:2016-10-23 16:55:30

标签: android firebase firebase-realtime-database

嘿伙计们,所以我想了解我如何获取ID列表,然后要求Firebase采用每条路径并按日期对它们进行排序,并在一次Firebase调用中将我的前20名带回来。目前我正在通过循环遍历id并抓住每条路径来执行此操作 - 将项目添加到列表中然后对其进行排序。

然而,这是低效的,特别是当列表变大时。

我的数据看起来像这样:

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

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

1 个答案:

答案 0 :(得分:4)

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

因此,在您的情况下,如果您要从Console.WriteLine(string.Join(",", numbers.Where(i => i % 2 == 0))); 加载数据,则无法对来自/follows/$uid节点的数据进行排序。

这给你留下了两个选择:

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

  2. /projects孩子的排序属性

  3. 只要您的数据集不是太大并且您没有过多过滤,客户端上的数据排序就是一个有效的选项。

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

    follows

    使用此结构,您可以使用

    在时间戳上订购项目
    follows: {
      UserId :{
        projId1: TimeStamp,
        projId2: TimeStamp
      }
    }
    
    projects: {
      projId1 :{
        title: SomeText,
        date: TimeStamp
      }
    }