我如何通过孩子的孩子订购?如果不可能,我有哪些选择?

时间:2016-05-30 16:23:44

标签: javascript firebase firebase-realtime-database

我正在使用的数据的基本结构是:

Claims: {
  "6B7CBFB4-16EA" : {
    "E4A5DB45-C1DE" : {
      "ID" : 3,
      "Store" : "Staples"
    }
  }

我还在此firebase https://torrid-inferno-3290.firebaseio.com/Claims上设置了一些示例数据以及jsfiddle https://jsfiddle.net/8j1zf7vd/

我希望能够订购ID或商店

前两个级别是随机生成的标识符。目前正在做的是我们正在检索Claims ref下的所有数据,然后在客户端对其进行排序,但随着应用程序的增长,这变得太多,所以我们需要对服务器端进行排序和限制。

如果这是不可能的,我只能查询Child,那么展平数据的最佳方法是什么?这将是一个大型的生产应用程序,因此将有大量的数据移动。 Firebase是否提供了一种简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

无法在Firebase数据库API中对动态孙子的属性进行排序。这意味着您必须修改数据结构以匹配应用程序访问它的方式。

一种方法是将大孩子存放在他们的ID下,而不是现在使用的密钥:

Claims: {
  "6B7CBFB4-16EA" : {
    "ID_3" : {
      "Key": "E4A5DB45-C1DE"
      "Store" : "Staples"
    }
  }

如果您需要您自己的密钥和ID的数据,您可以在每个声明下存储一个迷你索引以允许查找:

Claims: {
  "6B7CBFB4-16EA" : {
    "Key_E4A5DB45-C1DE": {
      "ID": 3
      "Store" : "Staples"
    },
    "keysByID": {
      "3" : {
        "Key": "E4A5DB45-C1DE"
      }
    },
    "keysByStore": {
      "Staples": {
        "Key": "E4A5DB45-C1DE"
      }
    }
  }