我如何通过 child 的 child 来订购?如果这不可能,我有什么选择?

How can I order by child of a child? What options do I have if this is not possible?

我正在处理的数据的基本结构是:

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

我还在这个 firebase 上设置了一些示例数据 https://torrid-inferno-3290.firebaseio.com/Claims as well as a jsfiddle https://jsfiddle.net/8j1zf7vd/

我希望能够通过 ID 或商店订购

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

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

无法在 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"
      }
    }
  }